js-拖拉表格实现内容计算-在线excel

2024-09-05 11:48

本文主要是介绍js-拖拉表格实现内容计算-在线excel,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

js-拖拉表格实现内容计算 目录

文章目录

  • 前言
  • 实现结果
  • 代码实现
    • `index.html`
    • `main.js`


前言

  • 制作网页版Excel
  • H5新增功能:可拖拉-draggable, 可编辑-contenteditable

实现结果

在这里插入图片描述

代码实现

index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Table</title><style>table, th, tr, td {margin: 0;padding: 0;width: 800px;text-align: center;border: solid 1px #000;}td {width: auto;background-color: pink;}.ops {cursor: move;}</style>
</head>
<body>
<table id="table"><thead id="thead"><tr id="header"><th>1</th></tr></thead><tbody id="tbody"></tbody>
</table>
<script src="main.js"></script>
</body>
</html>

main.js

createTable(10,10);
init();
// 表格初始化
// @param1: rows, 行数
// @param2: cols, 列数
function createTable(rows, cols) {let header = document.getElementById('header'),body = document.getElementById('tbody');for (let i = 0; i < rows; i ++){let tmp = '',trEle = document.createElement('tr');for (let j = 0; j < cols; j ++){//theadif (i <= 1){tmp += `<th>${j}</th>`;}else {tmp += `<td class="ops" draggable="true">${i}</td>`;}}// console.log(tmp);if (i <= 1) header.innerHTML = tmp;else{trEle.innerHTML = tmp;body.appendChild(trEle);}}
}/*
*   表格拖拽
* */
function init(){let x,y,data;document.body.addEventListener('click', event=>{event.preventDefault();});document.body.addEventListener('dragstart', event => {if (event.target.nodeName.toLowerCase() !== 'td'){alert('选择正确的内容');return false;}// console.log(event);x = event.clientX - 5,y = event.clientY - 5,data = parseInt(event.target.firstChild.data);let img = new Image();img.src = 'test.png';event.dataTransfer.setDragImage(img, 0,0);// console.log(x, y, data);});//阻止默认处理document.body.addEventListener('dragover', event => {event.preventDefault();});document.body.addEventListener('drop', event => {let tmp = new dragCalculation(x,y,data);let endX = event.clientX - 5,endY = event.clientY - 5,endData = parseInt(event.target.firstChild.data);// console.log(event.target.firstChild.data);// console.log(isNaN(endData))if (isNaN(endData)) {alert('移动位置错误');return false;}// console.log(endX, endY, endData);let result = tmp.sum(endX, endY, endData);event.target.firstChild.data = result;event.target.style.backgroundColor = '#b4e318'});
}let dragCalculation = function (x, y, data){this.startX = x;this.startY = y;this.startData = data;
};dragCalculation.prototype.sum = function (x, y, data) {//应该详细的边界判断if (this.startX == x ||this.startY == y ||isNaN(data))   {alert('不要放在原地不动');return false;}//    取和return data + this.startData;
}

这篇关于js-拖拉表格实现内容计算-在线excel的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138879

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

电力系统中的A类在线监测装置—APView400

随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount