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 相关文章推荐
用js实现随机返回数组的一个元素
Aug 13 Javascript
基于js disabled=&quot;false&quot;不起作用的解决办法
Jun 26 Javascript
jQuery on()方法使用技巧详解
Apr 16 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
js转换对象为xml
Feb 17 Javascript
jquery实现焦点轮播效果
Feb 23 Javascript
egg.js的基本使用和调用数据库的方法示例
May 18 Javascript
Vue实现固定定位图标滑动隐藏效果
May 30 Javascript
jQuery实现轮播图源码
Oct 23 jQuery
写给新手同学的vuex快速上手指北小结
Apr 14 Javascript
antd日期选择器禁止选择当天之前的时间操作
Oct 29 Javascript
JavaScript实现打字游戏
Feb 19 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
2019十大人气国漫
2020/03/13 国漫
PHP安全配置
2006/10/09 PHP
PHP资源管理框架Assetic简介
2014/06/12 PHP
微信开发之php表单微信中自动提交两次问题解决办法
2017/01/08 PHP
php 浮点数比较方法详解
2017/05/05 PHP
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
2012/12/26 Javascript
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
Javascript四舍五入Math.round()与Math.pow()使用介绍
2013/12/27 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
详解angular中通过$location获取路径(参数)的写法
2017/03/21 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
webpack优化的深入理解
2018/12/10 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
python中列表元素连接方法join用法实例
2015/04/07 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
深入浅析Python中的迭代器
2019/06/04 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
法学专业本科生自荐信范文
2013/12/17 职场文书
幼儿园教师培训方案
2014/02/04 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
师范生见习报告
2014/10/31 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
三峡人家导游词
2015/01/31 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
2016党员党章学习心得体会
2016/01/14 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/06 其他游戏