作者:手机用户2502857731 | 来源:互联网 | 2023-06-27 04:13
网页版模拟Excel近来公司闲的dan疼,非要模拟Excel做一个网页版的Excel,刚最先据说要做这么一个东西的时刻霎时以为公司指导高(sang)瞻(xin)远(bing)瞩(k
网页版模拟Excel
近来公司闲的dan疼,非要模拟Excel做一个网页版的Excel,刚最先据说要做这么一个东西的时刻霎时以为公司指导高(sang)瞻(xin)远(bing)瞩(kuang),只能头铁的接下了,那就最先干。实在重要目标是为了能连上本身的数据库,轻易支配表格,厥后发明完成本钱太高,做了一个前端DEMO就坚决摒弃了,然则这个DEMO照样有点意义,发开DEMO历程当中有些心得与收成。
github地点
https://github.com/zhuqitao/E…
完成功用
- 字体、字号、色彩、背景色、加粗、斜体等字体款式基础支配功用
- 鼠标拖拽多选单元格
- 摆布居中规划
- 兼并、拆分单元格
- 插进去函数(没有盘算功用的函数,只是静态增加函数名)
- 当地翻开excel(.xls)文件
截图
先看看现在的结果图:
转动题目
指导说先做一个demo看看结果,那就亮出咱家的看家本领吧html+css+js三剑客,不就是表格吗,html填上table,修修款式,页面结果就ok了。
第一个遇到的题目就是转动题目,看上面的截图就晓得实在这是一种表格表头牢固,表格第一列牢固,其他部份转动的结果,然则实在没有那末简朴,另有一个题目是垂直转动的时刻第一行(表头)不动,然则第一列得随着动啊,程度转动亦是云云,这可怎样办啊,这类状况没遇到过啊,然则得处置惩罚啊。
不晓得的网友们能够斟酌斟酌怎样做? 晓得怎样处置惩罚这类状况的也别喷博主菜。
末了的处置惩罚要领就是写了三个table,一个放表头(第一行),一个放第一列,一个放表格重要内容,看下图:
table1安排表头(A,B,C),table2安排第一列,table3安排中心支配地区,把table1、2设置为overflow:hidden,只要table3能够转动,监听table3的转动事宜,猎取table3的scrollLeft和scrollTop然后离别给table1、table2的scrollLeft和scrollTop赋值。
鼠标按下拖拽多选单元格
这个是本DEMO唯一的亮点了(个人认为)。
表格现在定下的是30*30的表格。一最先的主意是监听鼠标按下(mousedown)事宜猎取鼠标按下时的位置,然后再监听鼠标挪动事宜(mousemove),猎取鼠标当前的位置,然后依据当前位置和按下时位置画一个矩形,轮回遍历一切的单元格元素,推断单元格是不是在矩形内,然后给选中的单元格增加active类。
如许做的结果是页面异常卡,由于鼠标挪动历程会屡次触发鼠标挪动事宜(mousemove),会屡次举行单元格元素轮回遍历。 厥后就不在鼠标挪动事宜内里举行单元格遍历支配,在鼠标松开事宜内里遍历一切的单元格元素。
如许确切快了一些,然则另有一个题目上面两种要领都没处置惩罚的题目,就是假如挑选了许多元素(比方100个),在遍历单元格元素的时刻须要对着100个元素支配增加active类,实在js支配支配DOM是比较耗时的,这里也没有想到什么好的DOM支配缓存的要领。
就在束手无策的时刻想到了现在盛行的假造dom框架(react、vue等),坚决运用了vue。在vue实例里建立两个对象数组,离别作为行数据和列数据,页面上离别对
和标签运用v-for轮回衬着,如许就可以天生一张表格。每一个单元格都给加上行数和列树标志。 在鼠标按下猎取鼠标按下时地点单元格的行数和列数,鼠标松开时猎取松开时地点单元格的行数和列数,然后先轮回行数据的数组,一切在选中的行数的数据对象增加选中标志,然后再轮回列数据的数组,一切在选中的列数的数据对象增加选中标志,在页面临 |
和标签运用v-for轮回衬着时动态绑定class类,只要行和列同时被选中,单元格才设置为选中状况,如许实在只轮回了30+30=60次,霎时把复杂度有本来的O(n^2)降低到O(2n)。 实在背地是经由过程vue的diff算法疾速的盘算出须要转变的dom元素,然后应用假造dom疾速衬着到页面上,速率大大提拔。这也让我实在的感受到这些框架的威力(怪不得这么火)。 我的言语表达能力不是很强,上面说的人人不晓得有无听邃晓,没邃晓的能够看看源代码(^︹^)。 不测收成有一款jquery插件js-xlsx能够协助在线翻开当地xls文件,并把xls文件转成json。 应用xml的createElementNS建立带有指定定名空间的元素节点,再应用js自带Blob数据类型保留xls文件: var urlObject = window.URL || window.webkitURL || window; var export_blob = new Blob(['test']); var save_link = document.createElementNS("http://www.w3.org/1999/xhtml", "a") var ev = document.createEvent("MouseEvents"); ev.initMouseEvent( "click", true, false, window, 0, 0, 0, 0, 0 , false, false, false, false, 0, null ); save_link.href = urlObject.createObjectURL(export_blob); save_link.download = 'test.xls'; save_link.dispatchEvent(ev);
当一个HTML文档切换到设想形式 designMode时,文档对象暴露 execCommand 要领,该要领许可运转敕令来支配可编辑地区的内容。概况检察MDN地点:https://developer.mozilla.org… AbsolutePosition 设定元素的 position 属性为“absolute”(相对)。 BackColor 设置或猎取当前选中区的背景色彩。 BlockDirLTR 现在还没有支撑。 BlockDirRTL 现在还没有支撑。 Bold 切换当前选中区的粗体显现与否。 BrowseMode 现在还没有支撑。 Copy 将当前选中区复制到剪贴板。 Paste 用剪贴板内容掩盖当前选中区(现在还没有支撑)。 ... // 例子 document.execCommand("copy") document.execCommand("cut") document.execCommand('paste')
猎取鼠标选中的文本 手动设置剪切板,平常用于用户复制内容时增加版权信息。
推荐阅读
-
介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ...
[详细]
蜡笔小新 2023-12-14 05:55:08
-
本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ...
[详细]
蜡笔小新 2023-12-11 11:37:05
-
-
本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ...
[详细]
蜡笔小新 2023-12-11 09:41:26
-
本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ...
[详细]
蜡笔小新 2023-12-10 22:46:04
-
本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ...
[详细]
蜡笔小新 2023-12-14 17:43:56
-
本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ...
[详细]
蜡笔小新 2023-12-14 15:43:50
-
本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ...
[详细]
蜡笔小新 2023-12-14 14:29:36
-
在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ...
[详细]
蜡笔小新 2023-12-14 10:57:47
-
篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-12-14 09:50:34
-
本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ...
[详细]
蜡笔小新 2023-12-13 21:23:45
-
本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ...
[详细]
蜡笔小新 2023-12-13 19:32:09
-
本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ...
[详细]
蜡笔小新 2023-12-11 12:16:40
-
随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ...
[详细]
蜡笔小新 2023-12-10 20:05:15
-
随着前端技术的发展,越来越多的开发者开始使用react、vue等web框架,但很少有人深入理解这些框架的源码。然而,这些框架底层都是由原生的javascript构建而成。对于初学前端的人来说,可能会认为javascript很容易上手,但实际上只是因为它被高度封装了。与能够使用封装类的人相比,能够理解框架原理的人则处于另一个层面。本文将深入剖析jquery源码,探寻框架底层的原理,帮助读者更好地理解web框架的运行机制。 ...
[详细]
蜡笔小新 2023-12-10 17:42:39
-
作者表示自己最近工作非常忙碌,无法抽出时间写作。他计划在未来的几天内写关于namespace与C#的名字解析以及数据库内容转化为excel文件下载的知识。 ...
[详细]
蜡笔小新 2023-12-10 10:11:17
-
手机用户2502857731
这个家伙很懒,什么也没留下!
|