一、图片预加载

     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. SAP接口编程 之 JCo3.0系列(01):JCoDestination

    SAP接口编程 之 JCo3.0系列(01):JCoDestination 字数2101 阅读103 评论0 喜欢0 JCo3.0是Java语言与ABAP语言双向通讯的中间件.与之前1.0/2.0相比 ...

  2. [置顶] 将项目从tomcat 迁移到JBoss

    注:针对的是jboss5.0,其它版本没有测试过 ,主要参考了:http://www.diybl.com/course/3_program/java/javajs/20100719/460908.ht ...

  3. spring DI原理

    什么是IOC? 也称依赖注入 当一个类,需要另一个类的时候,我们不需要再另一个类里进行创建 对象,spring容器会给我们自动的创建 IOC的实现? 通过一定的技术读取spring.xml文件信息,比 ...

  4. Can of Worms 【迭代/线段树】

    题意:一条直线上有n个炸弹,给出每个炸弹的爆炸半径,可以引爆另一个炸弹爆炸.问:每个炸弹爆炸后,最多有几个炸弹一起爆炸? 迭代,用线段树更新. #include <cstdio> #inc ...

  5. 半平面交模板(O(n*n)&& O(n*log(n))

    摘自http://blog.csdn.net/accry/article/details/6070621 首先解决问题:什么是半平面? 顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分 ...

  6. HTML标签的默认样式

    body    有默认的内外边距(margin:0;padding:0); p         有默认的外边距(margin:0;)

  7. OpenGL的glTexCoord2f纹理坐标配置

    纹理坐标配置函数,先看定义: void glTexCoord2f (GLfloat s, GLfloat t); 1.glTexCoord2f()函数 有两个参数:GLfloat s, GLfloat ...

  8. matlab cross 3*1 向量叉乘

    一定是1*3  或者3*1 的向量才可以叉乘 A=[1 2 3] B=[4 5 6] cross(A,B) ans=[-3 6 -3] 解决机器人微分运动量之间的等价关系

  9. MEAN-全栈javascript开发框架

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

  10. Eclipse 配置Tomcat

    1.Eclipse EE 配置Tomcat Eclipse EE 主要用于Java Web开发和J2EE项目开发.Eclipse EE中配置Tomcat比较简单,新建一个Tomcat Server即可 ...