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刷新站IP和PV
Sep 05 Javascript
js螺旋动画效果的具体实例
Nov 15 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
常用的javascript设计模式
Jan 11 Javascript
JavaScript的事件机制详解
Jan 17 Javascript
jQuery中animate()的使用方法及解决$(”body“).animate({“scrollTop”:top})不被Firefox支持的问题
Apr 04 jQuery
微信小程序 标签传入数据
May 08 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 Javascript
Vue组件间通信 Vuex的用法解析
Aug 05 Javascript
vue实现随机验证码功能(完整代码)
Dec 10 Javascript
vue-router 控制路由权限的实现
Sep 24 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来计算某个目录大小的方法
2014/04/01 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
JS表单验证的代码(常用)
2016/04/08 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
layui扩展上传组件模拟进度条的方法
2019/09/23 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
日本必酷网络直营店:Biccamera
2019/03/23 全球购物
维也纳通行证:Vienna PASS
2019/07/18 全球购物
美国在线艺术商店:HandmadePiece
2020/11/06 全球购物
就业表自我评价分享
2014/02/06 职场文书
党员承诺书内容
2014/03/26 职场文书
意外伤害赔偿协议书范本
2014/09/28 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
裁员通知
2015/04/25 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书
怎么用Python识别手势数字
2021/06/07 Python
Nginx配置之禁止指定IP访问
2022/05/02 Servers
springcloud整合seata
2022/05/20 Java/Android
vue使用element-ui按需引入
2022/05/20 Vue.js
linux目录管理方法介绍
2022/06/01 Servers