div层的移动及性能优化


Posted in Javascript onNovember 16, 2010

同样如果一个页面结构很复杂或者电脑配置不好的话也会出现这种情况。为了弄清变慢的原因,我们做了几个demo对比,最后发现在mousemove事件上加上定时器能改进这个体验。

整个代码的关键地方在于当鼠标按下时开始了的计时器,这样Onmousemove事件会每隔30ms执行一次,然后在鼠标松下的时候清除计时器。

timer=setInterval(function(){flag=true;},30);

这样可以减轻浏览器绘制div层的负担,不至于拖动时每时每刻都在移动,其实太短了人眼也感觉不到变化,延迟间隔可以自己根据体验设置。

function Endrag(source,target){ 
source=typeof(source)=="object" ? source:document.getElementById(source); 
target=typeof(target)=="object" ? target:document.getElementById(target); 
var x0=0,y0=0,x1=0,y1=0,moveable=false,index=100; 
var timer,flag=false; 
var i=0; 
source.onmousedown=function(e){ 
e = e ? e : (window.event ? window.event : null); 
x0 = e.clientX ; 
y0 = e.clientY ; 
x1 = isNaN(parseInt(source.style.left))?0:parseInt(source.style.left); 
y1 = isNaN(parseInt(source.style.top))?0:parseInt(source.style.top); 
moveable = true; 
//当鼠标按下时,定时器开始工作,每隔50ms执行一次mousemove事件 
timer=setInterval(function(){flag=true;},30); 
}; 
//拖动; 
source.onmousemove=function(e){ 
e = e ? e : (window.event ? window.event : null); 
if(moveable){ 
if(flag){ 
i++; 
flag=false; 
target.style.left = (e.clientX + x1 - x0 ) + "px"; 
target.style.top = (e.clientY + y1 - y0 ) + "px"; 
} 
} 
}; 
//停止拖动; 
source.onmouseup=function (e){ 
if(moveable) { 
moveable = false; 
clearInterval(timer); 
//alert(i); 
} 
}; 
//停止拖动; 
source.onmouseout=function (e){ 
if(moveable) { 
moveable = false; 
clearInterval(timer); 
//alert(i); 
} 
}; 
}
Javascript 相关文章推荐
JavaScript中为元素加上name属性的方法
May 09 Javascript
Jquery 表格合并的问题分享
Sep 17 Javascript
基于jquery点击自以外任意处,关闭自身的代码
Feb 10 Javascript
javascript移出节点removeChild()使用介绍
Apr 03 Javascript
js确认删除对话框适用于a标签及submit
Jul 10 Javascript
JS实现向表格中动态添加行的方法
Mar 30 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
bootstrap配合Masonry插件实现瀑布式布局
Jan 18 Javascript
微信小程序引用公共js里的方法的实例详解
Aug 17 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
Feb 21 Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 Vue.js
自用js开发框架小成 学习js的朋友可以看看
Nov 16 #Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
Nov 16 #Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 #Javascript
javascript Array对象基础知识小结
Nov 16 #Javascript
纯js实现背景图片切换效果代码
Nov 14 #Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 #Javascript
cnblogs中在闪存中屏蔽某人的实现代码
Nov 14 #Javascript
You might like
PHP下10件你也许并不了解的事情
2008/09/11 PHP
php 分库分表hash算法
2009/11/12 PHP
php实现无限级分类实现代码(递归方法)
2011/01/01 PHP
php实现购物车功能(上)
2020/07/23 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
JavaScript与JQUERY获取元素的宽、高和位置
2017/02/26 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
vue与bootstrap实现时间选择器的示例代码
2017/08/26 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
Vue Prop属性功能与用法实例详解
2019/02/23 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
Vue使用Element实现增删改查+打包的步骤
2020/11/25 Vue.js
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python异常处理总结
2014/08/15 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
利用python求积分的实例
2019/07/03 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
Python无损压缩图片的示例代码
2020/08/06 Python
纯CSS3+DIV实现小三角形边框效果的示例代码
2020/08/03 HTML / CSS
英国的一家创新礼品和小工具零售商:Menkind
2019/08/24 全球购物
学校经典推荐信
2013/10/30 职场文书
函授本科自我鉴定
2014/02/04 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书