JavaScript运动框架 多物体任意值运动(三)


Posted in Javascript onMay 17, 2017

前面两篇都是单物体的运动,本文开始讲多物体的运动,比如多个div的各自不同的属性如宽,高,字体大小,透明度的缓冲运动变化。

从本文起,就不再使用offsetWdith,offsetHeight了等等,因为会出现问题,比如加个border,offsetWidth就会出现严重问题,参见我个人的博客JavaScript中offsetWidth的'bug'及其对策解决方案就是封装getStyle(obj, attr) 函数,用了获取运动中的当前值!

function getStyle(obj, name) {
 if(obj.currentStyle) {//IE
 return obj.currentStyle[name];
 } else {
 return getComputedStyle(obj, false)[name];
 }
}

既然是各个物体各自运动,那么他们之间有些变量就不能共享,比如定时器,每个对象都应有自己的定时器,因为每次启动定时器的时候先要清除上一个定时器,这就导致如果第一个物体还在运动,就把鼠标移动到第二个物体,瞬间清除上个定时器,导致第一个物体的运动不能运动到目标值就停下

另外,物体运动的样式,基本上就两类:一类是大小也就是px为单位的属性,还有一类就是透明度!

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>运动框架(三):多物体运动</title>
 <style type="text/css">
 div {
 width: 100px;
 height: 100px;
 background: yellow;
 margin: 10px;
 float: left;
 filter: alpha(opacity:100);
 opacity: 1;
 }
 </style>
</head>
<body>
 <div id="div1">变高</div>
 <div id="div2">变宽</div>
 <div id="div3">fontSize Changed</div>
 <div id="div4">alpha</div>

 <script type="text/javascript">
 var doc = document;
 var oDiv1 = doc.getElementById('div1');
 oDiv1.onmouseover = function() {
 startMove(this, 'height', 300);
 };
 oDiv1.onmouseout = function() {
 startMove(this, 'height', 100);
 };

 var oDiv2 = doc.getElementById('div2');
 oDiv2.onmouseover = function() {
 startMove(this, 'width', 300);
 };
 oDiv2.onmouseout = function() {
 startMove(this, 'width', 100);
 };

 var oDiv3 = doc.getElementById('div3');
 oDiv3.onmouseover = function() {
 startMove(this, 'fontSize', 30);
 };
 oDiv3.onmouseout = function() {
 startMove(this, 'fontSize', 16);
 };

 var oDiv4 = doc.getElementById('div4');
 oDiv4.onmouseover = function() {
 startMove(this, 'opacity', 30);
 };
 oDiv4.onmouseout = function() {
 startMove(this, 'opacity', 100);
 };


 function getStyle(obj, attr) {
 if (obj.currentStyle) {
 return obj.currentStyle[attr];
 } else {
 return getComputedStyle(obj, null)[attr];
 }
 }

 function startMove(obj, attr, iTarget) {
 clearInterval(obj.timer);
 obj.timer = setInterval(function() {
 var cur = 0;
 if (attr === 'opacity') {
  cur = parseFloat(getStyle(obj, attr)) * 100;
 } else {
  cur = parseInt(getStyle(obj, attr));
 }
 var speed = (iTarget - cur) / 10;
 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
 if (iTarget == cur) {
  clearInterval(obj.timer);
 } else {
  if (attr === 'opacity') {
  cur += speed;
  obj.style.filter = 'alpha(opacity:' + cur + ')';
  obj.style.opacity = cur / 100;//FireFox && Chrome
  } else {
  cur += speed;
  obj.style[attr] = cur + 'px'; 
  }

 }
 }, 30);
 }

 </script>
</body>
</html>

JavaScript运动框架 多物体任意值运动(三)

JavaScript运动框架 多物体任意值运动(三)

JavaScript运动框架 多物体任意值运动(三)

JavaScript运动框架 多物体任意值运动(三)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 原型继承之构造函数继承
Aug 26 Javascript
jQuery级联操作绑定事件实例
Sep 02 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
Nov 06 Javascript
jQuery页面刷新(局部、全部)问题分析
Jan 09 Javascript
JavaScript File API文件上传预览
Feb 02 Javascript
微信小程序实时聊天WebSocket
Jul 05 Javascript
Vue Promise的axios请求封装详解
Aug 13 Javascript
自己动手封装一个React Native多级联动
Sep 19 Javascript
JS双向链表实现与使用方法示例(增加一个previous属性实现)
Jan 31 Javascript
详解微信小程序调用支付接口支付
Apr 28 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
vue 动态组件用法示例小结
Mar 06 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
May 17 #Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
May 17 #Javascript
vue之nextTick全面解析
May 17 #Javascript
Vue.js学习教程之列表渲染详解
May 17 #Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 #Javascript
深入理解Commonjs规范及Node模块实现
May 17 #Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 #Javascript
You might like
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
2014/11/04 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jQuery获取iframe的document对象的方法
2014/10/10 Javascript
nodejs简单实现中英文翻译
2015/05/04 NodeJs
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
javascript实现秒表计时器的制作方法
2017/02/16 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
js如何实现元素曝光上报
2019/08/07 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python Json序列化与反序列化的示例
2018/01/31 Python
使用Python设计一个代码统计工具
2018/04/04 Python
python对html过滤处理的方法
2018/10/21 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
高校毕业生登记表自我鉴定
2013/11/03 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
学习全国两会精神心得体会范文
2014/03/17 职场文书
村级换届选举方案
2014/05/10 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
安全承诺书
2015/01/19 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
保送生自荐信范文
2015/03/26 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL