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 相关文章推荐
类之Prototype.js学习
Jun 13 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
Nov 15 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
Apr 02 Javascript
javascript:;与javascript:void(0)使用介绍
Jun 05 Javascript
javascript生成json数据简单示例分享
Feb 14 Javascript
浅谈JavaScript字符集
May 22 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
浅谈Sticky组件的改进实现
Mar 22 Javascript
jQuery使用$.each遍历json数组的简单实现方法
Apr 18 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
Aug 23 Javascript
vue时间格式化实例代码
Jun 13 Javascript
微信小程序下拉框组件使用方法详解
Dec 28 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/10/02 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
简单方法判断JavaScript对象为null或者属性为空
2014/09/26 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
vue服务端渲染操作简单入门实例分析
2019/08/28 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
python类继承用法实例分析
2015/05/27 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
Python3 Random模块代码详解
2017/12/04 Python
python 对象和json互相转换方法
2018/03/22 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python字符串查找函数的用法详解
2019/07/08 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
Python 实现一行输入多个数字(用空格隔开)
2020/04/29 Python
Python txt文件如何转换成字典
2020/11/03 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
硕士生工作推荐信
2014/03/07 职场文书
2014院党委领导班子及其成员群众路线对照检查材料思想汇报
2014/10/04 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL
PYTHON InceptionV3模型的复现详解
2022/05/06 Python