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 相关文章推荐
你的编程语言可以这样做吗?
Sep 07 Javascript
window.location.hash 属性使用说明
Mar 20 Javascript
有关JavaScript的10个怪癖和秘密分享
Aug 28 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
May 27 Javascript
js设置document.domain实现跨域的注意点分析
May 21 Javascript
基于jQuery实现select下拉选择可输入附源码下载
Feb 03 Javascript
基于Phantomjs生成PDF的实现方法
Nov 07 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
Jun 10 Javascript
JS实现简易留言板增删功能
Feb 08 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
Sep 02 Javascript
js实现鼠标切换图片(无定时器)
Jan 27 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中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
AngularJS使用拦截器实现的loading功能完整实例
2017/05/17 Javascript
解决html input验证只能输入数字,不能输入其他的问题
2017/07/21 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
js装饰设计模式学习心得
2018/02/17 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
layui加载表格,绑定新增,编辑删除,查看按钮事件的例子
2019/09/06 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
一个超级简单的python web程序
2014/09/11 Python
详解python websocket获取实时数据的几种常见链接方式
2019/07/01 Python
python 提取文件指定列的方法示例
2019/08/07 Python
如何理解python对象
2020/06/21 Python
Pycharm github配置实现过程图解
2020/10/13 Python
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
餐饮业员工工作决心书
2014/03/11 职场文书
校庆标语集锦
2014/06/25 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
2014司机年终工作总结
2014/12/05 职场文书
学校运动会加油词
2015/07/18 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书
详解Nginx 工作原理
2021/03/31 Servers
python用字节处理文件实例讲解
2021/04/13 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技