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小技巧 2.5 则
Sep 12 Javascript
JavaScript 实现类的多种方法实例
May 01 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
推荐 21 款优秀的高性能 Node.js 开发框架
Aug 18 Javascript
基于jquery实现人物头像跟随鼠标转动
Aug 23 Javascript
jQuery实现下滑菜单导航效果代码
Aug 25 Javascript
基于JavaScript实现 网页切出 网站title变化代码
Apr 03 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
vue-cli如何快速构建vue项目
Apr 26 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
May 11 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
Dec 27 Javascript
vue cli2.0单页面title修改方法
Jun 07 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
截获网站title标签之家内容的例子
2006/10/09 PHP
PHP积分兑换接口实例
2015/02/09 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
执行iframe中的javascript方法
2008/10/07 Javascript
javascript 树控件 比较好用
2009/06/11 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
用js读、写、删除Cookie代码续篇
2014/12/03 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
基于JavaScript实现瀑布流布局
2018/08/15 Javascript
微信小程序实现简单跑马灯效果
2020/05/26 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
Python中for循环详解
2014/01/17 Python
python模块之StringIO使用示例
2015/04/08 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
python3 实现验证码图片切割的方法
2018/12/07 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
python原类、类的创建过程与方法详解
2019/07/19 Python
python操作yaml说明
2020/04/08 Python
python列表的逆序遍历实现
2020/04/20 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
音乐系毕业生自荐信
2013/10/27 职场文书
文科教师毕业的自我评价
2014/01/16 职场文书
投资意向书范本
2014/04/01 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
档案管理员岗位职责
2015/02/12 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
Go语言编译原理之变量捕获
2022/08/05 Golang