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实现UTF8编码转换成gb2312编码
Dec 22 Javascript
jQuery之选择组件的深入解析
Jun 19 Javascript
JavaScript版TAB选项卡效果实例
Aug 16 Javascript
详解jquery中$.ajax方法提交表单
Nov 03 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
jQuery实现判断滚动条到底部
Jun 23 Javascript
jquery实现的树形目录实例
Jun 26 Javascript
Angular中$state.go页面跳转并传递参数的方法
May 09 Javascript
利用Javascript实现一套自定义事件机制
Dec 14 Javascript
利用npm 安装删除模块的方法
May 15 Javascript
如何实现一个webpack模块解析器
Oct 24 Javascript
JS跨域请求的问题解析
Dec 03 Javascript
自用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 简单数组排序实现代码
2009/08/05 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
Yii使用技巧大汇总
2015/12/29 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
ExtJS 2.0 实用简明教程之布局概述
2009/04/29 Javascript
JavaScript 10件让人费解的事情
2010/02/15 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
详解Node.js中path模块的resolve()和join()方法的区别
2018/10/29 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
javascript实现简单页面倒计时
2021/03/02 Javascript
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python执行get提交的方法
2015/04/29 Python
python中import学习备忘笔记
2017/01/24 Python
python OpenCV学习笔记之绘制直方图的方法
2018/02/08 Python
python交易记录链的实现过程详解
2019/07/03 Python
微信小程序python用户认证的实现
2019/07/29 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
python如何获取apk的packagename和activity
2020/01/10 Python
pygame实现飞机大战
2020/03/11 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
机电工程学生自荐信范文
2013/12/07 职场文书
师说教学反思
2014/02/07 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
MutationObserver在页面水印实现起到的作用详解
2022/07/07 Javascript