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,如需转载请自行联系原作者


相关文章
|
1月前
|
缓存 关系型数据库 API
后端开发:构建高效、可扩展的Web应用程序的关键
后端开发:构建高效、可扩展的Web应用程序的关键
20 0
|
1天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
9 0
|
2天前
|
Python 数据可视化 索引
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
14 0
PYTHON用GARCH、离散随机波动率模型DSV模拟估计股票收益时间序列与蒙特卡洛可视化
|
2天前
|
机器学习/深度学习 算法 数据可视化
用SPSS Modeler的Web复杂网络对所有腧穴进行关联规则分析3
用SPSS Modeler的Web复杂网络对所有腧穴进行关联规则分析3
14 0
用SPSS Modeler的Web复杂网络对所有腧穴进行关联规则分析3
|
20天前
|
前端开发 JavaScript 数据管理
描述一个使用Python开发Web应用程序的实际项目经验,包括所使用的框架和技术栈。
使用Flask开发Web应用,结合SQLite、Flask-SQLAlchemy进行数据管理,HTML/CSS/JS(Bootstrap和jQuery)构建前端。通过Flask路由处理用户请求,模块化代码提高可维护性。unittest进行测试,开发阶段用内置服务器,生产环境可选WSGI服务器或容器化部署。实现了用户注册登录和数据管理功能,展示Python Web开发的灵活性和效率。
14 4
|
1月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
15 0
|
1月前
|
存储 安全 数据安全/隐私保护
什么是 Web 应用程序的会话管理?如何在 Python 中实现?
什么是 Web 应用程序的会话管理?如何在 Python 中实现?
10 2
|
1月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
1月前
|
Web App开发 前端开发 测试技术
Web应用程序测试工具Selenium用法详解
Web应用程序测试工具Selenium用法详解
37 0
|
1月前
|
SQL 机器学习/深度学习 缓存
Go语言Web应用实战与案例分析
【2月更文挑战第21天】本文将通过实战案例的方式,深入探讨Go语言在Web应用开发中的应用。我们将分析一个实际项目的开发过程,展示Go语言在构建高性能、可扩展Web应用方面的优势,并分享在开发过程中遇到的问题和解决方案,为读者提供宝贵的实战经验。

热门文章

最新文章