【HoorayOS】开源的Web桌面应用框架(文件夹功能分析)

摘要:
我想知道,在文件夹之间拖动图标是否也可以引用此模式。桌面上所有打开和显示的文件夹窗口都作为网格保存在阵列中。因为在任何情况下,桌面上显示的窗口都高于桌面,也就是说,它覆盖在桌面上,所以当拖动结束并完成释放时,优先级是确定图标是否在文件夹的网格中,然后依次确定应用程序驳接的网格和桌面的网格。

  下一版本的重要功能就是“文件夹”,随着应用码头的出现,任务栏也改成大图标的模式,桌面可放置图标的位置越来越少,“文件夹”就应然而生了,但在制作过程中,发现几个难点,也就是图标拖动时需要注意的部分。如下图,文件夹内的图标在拖动结束的时候,位置可能会处在四处:应用码头、桌面、当前文件夹、其他文件夹

【HoorayOS】开源的Web桌面应用框架(文件夹功能分析)第1张

  前两种情况可以参考下图,图标拖动的第一步就是先画格子。(demo:http://jsbin.com/otihix/1

【HoorayOS】开源的Web桌面应用框架(文件夹功能分析)第2张

  然后记录下每个格子四个角的坐标保存为数组,然后循环数组依次添加图标进去。

【HoorayOS】开源的Web桌面应用框架(文件夹功能分析)第3张

  之后图标拖动也是需要这个格子数组,当我拖动完毕释放图标的时候,判断鼠标释放的位置处于哪个格子中间,进行图标移动并重新排序,实现图标拖动功能,应用码头拖动也是同样思路,两者结合起来无非就是要判断两次,先判断释放位置是否处于应用码头的格子内,然后再判断是否处于桌面的格子内。

  我在想,文件夹之间的图标拖动是否也可以参考这种模式,桌面上所有已打开并处于显示状态的文件夹窗口,当作是一个个的格子,保存到一个数组里。因为显示在桌面的窗口不管在任何情况都是高于桌面的,也就是覆盖在桌面上,所以当拖动结束释放时,优先判断图标是否处于文件夹的格子内,然后再依次判断应用码头的格子和桌面的格子。

  随之又想到会出现这种情况,就是文件夹会重叠,如果我图标拖动的位置刚好处于图中问号处,系统怎么知道我先要拖放的位置的哪个窗口呢?

【HoorayOS】开源的Web桌面应用框架(文件夹功能分析)第4张

  其实细想一下,完全不用担心。我的文件夹格子数组可以在图标拖动的时候创建,创建的时候依次按文件夹窗口z-index的值从大到小来读取,这样就是保证文件夹格子数组里记录内容的顺序也是按照文件夹层级顺序来存放的,当我循环数组判断图标拖放位置的时候,自然也就避免了刚才那个问题。

  OK,以上就是文件夹内图标拖动的大致思路,希望开发的时候能够顺利些,也能让第三版顺利面世,让大家用用试试。

  PS:更新demo演示:http://jsfiddle.net/UjS7Y/2/embedded/result/

免责声明:文章转载自《【HoorayOS】开源的Web桌面应用框架(文件夹功能分析)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Spring Boot 使用 XXL-JOBlinux sync命令下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Document方法对比

(1)Document.getElementsByName(“name”)用于获取一个页面中包含所有指定name元素的对象数组。 (2)document.getElementById(“id”)用于获取对象,只不过我们只能获取ID重复的那些对象中在HTML呈现时第一个出现的对象。而这时重复的ID会在引用时自动变成一个数组,ID重复的元素呈现的顺序依次在于数...

ubuntu upgrade

升级命令 虽然 apt-get 经常被人诟病,但实际上它还是个挺好用的软件包管理器。在 Ubuntu 14.04 以后的系统中,apt-get 相关的升级更新命令有四个: apt-get update apt-get upgrade apt-get full-upgrade apt-get dist-upgrade 那么,这四个升级命令都有什么差...

uniapp 下获取cid

咨询多次客服统一给的答案都是下面这种,但其实是不对的,因为我写的是app端,app 没有 document window 之类的方法。 document.addEventListener('plusready', function(){ // 页面加载时触发 var pinf = plus.push.getClientInfo();...

VUE项目中main.js、App.vue、import...from...等重要文件的作用和意义

一、main.js    1、 main.js 程序入口文件,初始化vue实例,并引入使用需要的插件和各种公共组件. import Vue from 'vue' import App from './App' import router from './router' import Less from 'Less' Vue.config.produ...

H5开发:横屏适配

平常我们做过的需求里,主要是以竖屏式为主,而横屏式较少。对于竖屏式场景来说,大家的经验会比较丰富,因此,此次主要式探讨下横屏式场景下的一些需要注意的点,特别是怎样去做横屏适配。 对于 H5 横屏页面来说,要实现横屏的话,主要是解决两点:1.无论用户手持方向如何,都需要保证屏幕横向显示。2.由于屏幕分辨率的多样化,因此就算是横屏下也是需要进行横屏适配,保证页...

centso 7 Keepalived 配置脚本

#!/bin/bash #This is keepalived bashshell. #MASTER/BACKUP yum install -y openssl openssl-devel keepalived vim /etc/keepalived/keepalived.conf sed -i 's/MASTER/BACKUP/g' /etc/...