开发者社区> 橘子红了呐> 正文

web桌面程序之图标拖动排序的分析

简介:
+关注继续查看

  在web桌面程序里,图标拖动并重新排序是个比较常见的功能。这个功能我之前反复修改了好几遍,现在终于整理出了比较理想的解决思路,决定拿出来分享下。

  这一功能主要有哪些难点呢?我总结了一下一共有2处难点

  1、如何知道被拖动的图标在拖动结束后处于哪个位置

  2、知道拖动结束后图标的最后拖动位置,如何判断是在该位置之前插入,还是在之后插入

  知道难点后,就可以来一一解决分析了。

  首先是第一个,如何知道被拖动的图标在拖动结束后处于哪个位置?要解决这一问题,我在之前的《开源的Web桌面应用框架(文件夹功能分析)》这篇文章中简单的提到过,只不过是简单的文字说明,下面我会在文字说明的基础上增加演示,方便大家理解。

  解决这个问题的前提就是需要绘制一套“格子”,这个格子用于图标初始化的排列,也用于拖动后判断结束位置,具体可以看下面的示例:

  http://jsbin.com/nayijunu/2/

  先点第一步,显示格子,再点第二步,加载图标。但其实直接点第二步就行,加载图标的时候才开始绘制格子,并且格子是不需要显示出来的,这里只是让大家更直观的能看到格子。(注:格子就是一组数组,分别记录每个格子的四角位置)

  根据格子放置图标这一步好了之后,我们就可以开始处理刚才第一个问题了,“如何知道被拖动的图标在拖动结束后处于哪个位置”,解决思路就是在拖动结束后,根据鼠标当前位置,在格子数组里进行搜索,因为每个格子都有自己的区域,所以能根据鼠标的坐标查询到处于哪个格子。以下是演示,可以随意拖动图标,拖动结束后会返回拖动结束后,鼠标当前位于哪个格子的编号,为了让效果更明显,在拖动过程中,我还会将鼠标位于的当前格子进行高亮显示。

  http://jsbin.com/edAJAdO/16/

  到这一步后,第一个问题已经解决了。接下来要处理的就是第二个问题,“如何判断是在该位置之前插入,还是在之后插入”。

  这里有几种处理办法:

  1、这种比较死板,就是统一使用一种插入方式,比如全部都在拖动结束后的位置之后插入,但这就会出现这种问题:你永远无法将某个图标拖动到一个位置。

  2、另一种稍微高级点,就是用图标的原始位置和拖动后的位置进行比较,如果后者大于前者,就代表是往前拖动,则图标插入到拖动后的位置之前,反之则插入到拖动后的位置之后。但这个有个缺陷就是,如果图标本身不在区域内,比如有2个区域,均有放置图标,并且可以互相拖动,这时两个位置不在同个区域内,则无法进行比较。

  3、第三种是我经过以上两种整理出一种最合理的办法,就是在每个放置图标的格子内,再进行划分,比如平均分成4个小格子,上面2个,下面2个。然后在图标拖动结束的时候,不仅获取当前位于哪个图标格子,同时也获取当前位于这个图标格子里的小格子的位置,通过这个位置,可以判断出是处于格子的左侧还是右侧,或者上方还是下方。最后根据这个判断是在该位置之前插入,还是之后插入,比如位于左侧,就在之前插入,右侧则在之后插入。(之所以分成4个小格子,目的就是应付图标的两种排列方式:横向排列和纵向排列)

  既然确定了方法,下面就看下实例,同样,为了让效果更明显,在拖动过程中,我还会将鼠标位于的当前格子进行高亮显示。

  http://jsbin.com/xegovabi/2/

  到这一步,基本就已经完成了,之后就是根据这2个参数进行操作了。除此之外,如果图标是纵向排列的,也可以进行处理。下面看下完整版demo吧

  http://jsbin.com/kasocuye/1/



    本文转自胡尐睿丶博客园博客,原文链接:http://www.cnblogs.com/hooray/p/3480087.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
前端学习笔记202304学习笔记第八天-web前端学习-深度学习分析2
前端学习笔记202304学习笔记第八天-web前端学习-深度学习分析2
5 0
前端学习笔记202304学习笔记第九天-web前端学习-脚手架的难点分析
前端学习笔记202304学习笔记第九天-web前端学习-脚手架的难点分析
4 0
试用阿里云云拨测对Web网站的网页性能进行测试并分析
利用分布于全球的监测网络,以真实终端用户使用场景为视角,提供模拟终端用户体验的拨测服务。 可实现对网络质量、页面性能、端口性能、文件传输、音视频体验等场景进行周期性监控,支持多维度分析性能指标。利用可视化性能数据和告警通知可帮助您及时对业务质量作出反应,保证业务稳定正常运行。
87 0
REST vs SOAP:两种 Web 服务协议的分析
REST(Representational State Transfer)和 SOAP(Simple Object Access Protocol)都是 Web 服务架构的两种主要风格。两者都提供了一种通信方式,可以让不同的应用程序通过网络互相交换数据。但是,它们之间有一些重要的区别。
16 0
web安全攻击方法流量分析
web安全攻击方法流量分析
175 0
抖音web端 s_v_web_id 参数生成分析与实现
抖音web端 s_v_web_id 参数生成分析与实现
308 0
Web前端页面性能及用户体验的监控与分析
WEB页面通常需要监控的指标包括:服务状态、HTTP响应码、总响应时间、DNS解析时间、连接时间、服务器响应时间、平均下载速度、页面大小、页面大小变化等指标。
345 0
Web思维导图实现的技术点分析(附完整源码)
Web思维导图实现的技术点分析(附完整源码)
193 0
【WEB安全】Apache Log4j 漏洞利用分析(下)
Apache Log4j 项目被爆存在远程代码执行漏洞,且利用简单,影响危害巨大,光是引入了 log4j2 依赖的组件都是数不清,更别提项目本身可能存在的风险了,复现漏洞来学习一下,希望可以帮助到大家。
149 0
+关注
橘子红了呐
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
PWA:移动Web的现在与未来
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多