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动态调整iframe高度的代码
Apr 10 Javascript
读jQuery之十二 删除事件核心方法
Jul 31 Javascript
JavaScript保留关键字汇总
Dec 01 Javascript
javascript图片延迟加载实现方法及思路
Dec 31 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
100多个基础常用JS函数和语法集合大全
Feb 16 Javascript
jquery仿微信聊天界面
May 06 jQuery
谈谈对vue响应式数据更新的误解
Aug 01 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 Javascript
深入浅析vue中cross-env的使用
Sep 12 Javascript
JavaScript array常用方法代码实例详解
Sep 02 Javascript
Angular性能优化之第三方组件和懒加载技术
May 10 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注入实例
2006/10/09 PHP
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
php模板函数 正则实现代码
2012/10/15 PHP
php foreach正序倒序输出示例代码
2014/07/01 PHP
Centos 6.5下PHP 5.3安装ffmpeg扩展的步骤详解
2017/03/02 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
在Angular中实现一个级联效果的下拉框的示例代码
2020/05/20 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
跟老齐学Python之永远强大的函数
2014/09/14 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
python使用sessions模拟登录淘宝的方式
2019/08/16 Python
python求前n个阶乘的和实例
2020/04/02 Python
Python必须了解的35个关键词
2020/07/16 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
播音主持女孩的自我评价分享
2013/11/20 职场文书
城市精细化管理实施方案
2014/03/04 职场文书
护士求职自荐信
2015/03/25 职场文书
退休教师追悼词
2015/06/23 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Python如何用re模块实现简易tokenizer
2022/05/02 Python
Oracle 11g数据库使用expdp每周进行数据备份并上传到备份服务器
2022/06/28 Oracle