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 相关文章推荐
新鲜出炉的js tips提示效果
Apr 03 Javascript
jQuery.getScript加载同域JS的代码
Feb 13 Javascript
javascript两种function的定义介绍及区别说明
May 02 Javascript
Ext JS添加子组件的误区探讨
Jun 28 Javascript
jQuery中slideUp 和 slideDown 的点击事件
Feb 26 Javascript
Google 地图获取API Key详细教程
Aug 06 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
Jul 13 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 Javascript
Openlayers测量距离与面积的实现方法
Sep 25 Javascript
jQuery实现简单评论区功能
Oct 26 jQuery
Vue提供的三种调试方式你知道吗
Jan 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 redis实现超迷你全文检索
2017/03/04 PHP
js 分栏效果实现代码
2009/08/29 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
js获取隐藏元素宽高的实现方法
2016/05/19 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
JS利用prototype给类添加方法操作详解
2019/06/21 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
在vue中实现echarts随窗体变化
2020/07/27 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
讲解Python中的标识运算符
2015/05/14 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
python取余运算符知识点详解
2019/06/27 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
pandas的resample重采样的使用
2020/04/24 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
幼儿园教学随笔感言
2014/02/23 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
创先争优活动心得体会
2014/09/04 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
行政主管岗位职责
2015/02/03 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
进行数据处理的6个 Python 代码块分享
2022/04/06 Python