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 相关文章推荐
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
extjs中grid中嵌入动态combobox的应用
Jan 01 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
Oct 24 Javascript
Javascript中this关键字的一些小知识
Mar 15 Javascript
innerHTML中标签可以换行的方法汇总
Aug 14 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
Sep 04 Javascript
javascript中的作用域和闭包详解
Jan 13 Javascript
微信小程序 UI与容器组件总结
Feb 21 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 Javascript
JavaScript实现移动端拖动元素
Nov 24 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
PHP4中实现动态代理
2006/10/09 PHP
file_get_contents获取不到网页内容的解决方法
2013/03/07 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
PHP常用正则表达式集锦
2014/08/17 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
点弹代码 点击页面任何位置都可以弹出页面效果代码
2012/09/17 Javascript
Jquery实现Div上下移动示例
2014/04/23 Javascript
jQuery遍历对象、数组、集合实例
2014/11/08 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
Vue.js点击切换按钮改变内容的实例讲解
2018/08/22 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
2019/03/04 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
Python中的默认参数实例分析
2018/01/29 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
2019/11/28 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
python小程序基于Jupyter实现天气查询的方法
2020/03/27 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
MYSQL基础面试题
2012/05/13 面试题
机械专业应届生求职信
2013/12/12 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
工商管理专业毕业生自我鉴定2014
2014/10/04 职场文书
关于颐和园的导游词
2015/01/30 职场文书
护士医德考评自我评价
2015/03/03 职场文书
Django实现翻页的示例代码
2021/05/24 Python