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 相关文章推荐
JSON JQUERY模板实现说明
Jul 03 Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
Jun 26 Javascript
jQuery中hover方法和toggle方法使用指南
Feb 27 Javascript
实现JavaScript高性能的数据存储
Dec 11 Javascript
AngularJS2中一种button切换效果的实现方法(二)
Mar 27 Javascript
详解VueJS 数据驱动和依赖追踪分析
Jul 26 Javascript
老生常谈JS中的继承及实现代码
Jul 06 Javascript
jquery实现的简单轮播图功能【适合新手】
Aug 17 jQuery
浅谈angular2子组件的事件传递(任意组件事件传递)
Sep 30 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
Dec 28 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
Aug 25 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模板技术原理【一】
2008/01/10 PHP
php array_flip() 删除数组重复元素
2009/01/14 PHP
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
如何使用php绘制在图片上的正余弦曲线
2013/06/08 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
深入解析fsockopen与pfsockopen的区别
2013/07/05 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
2010/09/19 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
Python实现pdf文档转txt的方法示例
2018/01/19 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
python实现两张图片的像素融合
2019/02/23 Python
简单易懂Pytorch实战实例VGG深度网络
2019/08/27 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
三分钟演讲稿范文
2014/04/24 职场文书
服务承诺书范文
2014/05/19 职场文书
2014年评职称工作总结
2014/11/20 职场文书
电话营销开场白
2015/05/29 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android