一、图片预加载

     var oImg = new Image();

     oImg.onload=function(){
//alert('success');
}
oImg.onerror=function(){
alert('failture');
}
oImg.src='images/5.jpg';

二、仿google自定义首页:集布局转换、拖拽、碰撞检测、交换位置于一体

     var oUl1=document.getElementById('ul1');
var aLi=oUl1.getElementsByTagName('li');
var aPos=[];
var iMinZindex=2;//设置最小层级
var i=0;
//布局转换
for(i=0;i<aLi.length;i++){
aPos[i]={left:aLi[i].offsetLeft,top:aLi[i].offsetTop};//console.log(aPos);
}
for(i=0;i<aLi.length;i++){
aLi[i].style.left=aPos[i].left+'px';
aLi[i].style.top=aPos[i].top+'px'; aLi[i].style.position='absolute';
aLi[i].style.margin='0';
aLi[i].index=i;
} //拖拽
for(i=0;i<aLi.length;i++){
setDrag(aLi[i]);
}
function setDrag(obj){
obj.onmousedown=function(ev){
this.style.zIndex=iMinZindex++;//保证当前对象的层级最高
var oEvent=ev||event; var disX=oEvent.clientX-obj.offsetLeft;
var disY=oEvent.clientY-obj.offsetTop; document.onmousemove=function(ev){
var oEvent=ev||event; obj.style.left=oEvent.clientX-disX+'px';
obj.style.top=oEvent.clientY-disY+'px'; for(i=0;i<aLi.length;i++){
aLi[i].className='';
} var oNear=findNearest(obj); if(oNear){
oNear.className='active';
}
/*for(i=0;i<aLi.length;i++){
if(obj==aLi[i]) continue;
if(cdTest(obj,aLi[i])){
aLi[i].className='active';
}else{
aLi[i].className='';
}
}*/
};
document.onmouseup=function(){
document.onmousemove=null;
document.onmouseup=null; var oNear=findNearest(obj); if(oNear){
/*oNear->obj
obj->oNear*/
oNear.className=''; startMove(oNear,aPos[obj.index]);
startMove(obj,aPos[oNear.index]); var tmp=0; tmp=oNear.index;
oNear.index=obj.index;
obj.index=tmp;
}else{
startMove(obj,aPos[obj.index]);//aPos[obj.index]=={left:aPos[obj.index].left,top:aPos[obj.index].top}
}
}; return false; };
} //碰撞检测
function cdTest(obj1,obj2){
var l1=obj1.offsetLeft;
var r1=obj1.offsetLeft+obj1.offsetWidth;
var t1=obj1.offsetTop;
var b1=obj1.offsetTop+obj1.offsetHeight; var l2=obj2.offsetLeft;
var r2=obj2.offsetLeft+obj2.offsetWidth;
var t2=obj2.offsetTop;
var b2=obj2.offsetTop+obj2.offsetHeight; if(r1<l2 || l1>r2 || t1>b2 || b1<t2){
return false;
}else{
return true;
}
} function getDis(obj1,obj2){
var a=obj1.offsetLeft-obj2.offsetLeft;
var b=obj1.offsetTop-obj2.offsetTop; return Math.sqrt(Math.pow(a,2)+Math.pow(b,2));
} function findNearest(obj){
var iMin=999999;
var iMinIndex=-1; for(i=0;i<aLi.length;i++){
if(obj==aLi[i]) continue; if(cdTest(obj,aLi[i])){
var dis=getDis(obj,aLi[i]); if(iMin>dis){
iMin=dis;
iMinIndex=i;
}
}
} if(iMinIndex==-1){
return null;
}else{
return aLi[iMinIndex];
}
} //运动

JS桌面应用的更多相关文章

  1. nw.js桌面程序自动更新(node.js表白记)

    Hello Google Node.js 一个基于Google V8 的JavaScript引擎. 一个伟大的端至端语言,或许我对你的热爱源自于web这门极富情感的技术吧! 注: 光阴似水,人生若梦, ...

  2. Vue.js 桌面端自定义滚动条组件|vue美化滚动条VScroll

    基于vue.js开发的小巧PC端自定义滚动条组件VScroll. 前段时间有给大家分享一个vue桌面端弹框组件,今天再分享最近开发的一个vue pc端自定义滚动条组件. vscroll 一款基于vue ...

  3. nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

    第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...

  4. 中文代码示例之NW.js桌面应用开发初体验

    先看到了NW.js(应该是前身node-webkit的缩写? 觉得该起个更讲究的名字, 如果是NorthWest之意的话, logo(见下)里的指南针好像也没指着西北啊)和Electron的比较文章: ...

  5. 使用electron构建跨平台Node.js桌面应用

    最近,把团队内经常使用的一个基于Node.js制作的小工具给做成了可视化操作的桌面软件,使用的是electron,这里简单分享一下使用electron的一些经验和心得. 一.如何使用electron把 ...

  6. 使用electron构建跨平台Node.js桌面应用经验分享

    by zhangxinxu from http://www.zhangxinxu.com/wordpress/?p=6154 本文可全文转载,但需得到原作者书面许可,同时保留原作者和出处,摘要引流则随 ...

  7. NW.js桌面应用开发(一)

    NWjs中文网 Electron中文网 一些需要了解的历史与特性,其实就是 NW.js 和 Electron的争议,建议还是亲自阅读一下各自的官网说明 1.下载SDK版工具 从淘宝NPM镜像下载,速度 ...

  8. NW.js 桌面应用程序

    nw.js官网    https://nwjs.io/downloads/ 中文网:https://nwjs.org.cn/ 参考文档 https://www.cnblogs.com/xuanhun/ ...

  9. 使用 notify.js 桌面提醒

    //var iN = new iNotify({ // effect: 'flash', // interval: 500, // message: "有消息拉!", // aud ...

随机推荐

  1. mac下pmset的使用方法

    在终端输入:pmset -g custom    这个命令可以显示系统所有的电源设置 lidwake: 当屏幕掀开的时候唤醒Mac,1是开启  0是关闭autopoweroff: 如果Mac处于睡眠状 ...

  2. Oracle中dual表的用途介绍

    导读]dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情.     dual是一个虚拟表,用来构成select的语法规则,or ...

  3. Android生命周期和Service生命周期

    android生命周期 运行:oncreate → onstart → onresume暂停:onresume → onpause:再次运行:onresume停止:onpause → onstop → ...

  4. epoll的lt和et模式的实验

    针对epoll api的两种触发模式,lt和et,仿照一些例子写了代码进行实验. #include <sys/types.h> #include <sys/socket.h> ...

  5. DB2数据库中SQL语句中使用or和and的关键字的时候注意事项

    --正确的SQL语句,查询结果:746 ) FROM EHR_BASE EB, EHR_HF_INDICATOR EHI WHERE EB.EHR_ID=EHI.EHR_ID ' ' ' AND EB ...

  6. hiho_1062_最近公共祖先

    题目大意 给出一棵家谱树,树中的节点都有一个名字,保证每个名字都是唯一的,然后进行若干次查询,找出两个名字的最近公共祖先. 分析 数据量较小,对于每次查询都进行如下操作: 先找出person1到达根节 ...

  7. MYSQL 【汇总数据】 【分组数据】 学习记录

    分组数据 1,创建分组:

  8. MEAN-全栈javascript开发框架

    引言 使用JavaScript能够完整迅速做出Web应用程序,目前一套工具包括MongoDB.ExpressJS,AngularJS和Node.js越来越受到欢迎,其开发的灵活性和易用性加快开发效率, ...

  9. mysql下sql语句 update 字段=字段+字符串

    mysql下sql语句 update 字段=字段+字符串   mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgr ...

  10. iOS 打包静态类库 lib.a

    iOS 打包静态类库 lib.a 流程 1: xcode---新建项目---iOS-framework&Library-----Cocoa touch Static Library----Ne ...