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 页面输出值
Nov 30 Javascript
js事件冒泡实例分享(已测试)
Apr 23 Javascript
将json对象转换为字符串的方法
Feb 20 Javascript
Bootstrap每天必学之按钮
Nov 26 Javascript
JavaScript新增样式规则(推荐)
Jul 19 Javascript
jquery过滤特殊字符',防sql注入的实现方法
Aug 17 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
Nov 03 Javascript
IE8兼容Jquery.validate.js的问题
Dec 01 Javascript
JavaScript阻止表单提交方法(附代码)
Aug 15 Javascript
Vue.js在数组中插入重复数据的实现代码
Nov 17 Javascript
vue-cli配置flexible过程详解
Jul 04 Javascript
Vue组件通信中非父子组件传值知识点总结
Dec 05 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
php随机取mysql记录方法小结
2014/12/27 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
2018/09/26 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
浅谈Javascript 执行顺序
2013/12/18 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
jQuery实现Email邮箱地址自动补全功能代码
2015/11/03 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
js实现弹窗猜数字游戏
2020/11/26 Javascript
[42:34]VP vs VG 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python备份文件的脚本
2008/08/11 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python中强大的命令行库click入门教程
2016/12/26 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
Python读取系统文件夹内所有文件并统计数量的方法
2018/10/23 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python+tkinter实现学生管理系统
2019/08/20 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
2019/09/23 Python
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
化学教育专业求职信
2014/07/08 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
自荐信怎么写
2015/03/04 职场文书
2015年学校党支部工作总结
2015/04/01 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
python识别围棋定位棋盘位置
2021/07/26 Python