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 强制刷新代码
Jul 23 Javascript
js DOM模型操作
Dec 28 Javascript
ScrollDown的基本操作示例
Jun 09 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
jQuery Ajax调用WCF服务详细教程
Mar 31 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
Jun 08 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
Aug 30 Javascript
JavaScript在网页中画圆的函数arc使用方法
Nov 13 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
Jun 14 Javascript
从setTimeout看js函数执行过程
Dec 19 Javascript
Vue自定义多选组件使用详解
Sep 08 Javascript
JavaScript 实现轮播图特效的示例
Nov 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学习之 循环结构实现代码
2011/06/09 PHP
Cookie 注入是怎样产生的
2009/04/08 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
canvas+gif.js打造自己的数字雨头像的示例代码
2017/10/26 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
Python定义函数功能与用法实例详解
2019/04/08 Python
Python当中的array数组对象实例详解
2019/06/12 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
Python操作远程服务器 paramiko模块详细介绍
2019/08/07 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
优秀研究生自我鉴定
2013/12/04 职场文书
农民致富事迹材料
2014/01/23 职场文书
大学军训感言200字
2014/02/26 职场文书
团日活动总结书格式
2014/05/08 职场文书
素质教育标语
2014/06/27 职场文书
员工辞职信范文大全
2015/05/12 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
mysql中DCL常用的用户和权限控制
2022/03/31 MySQL
为Centos安装指定版本的Docker
2022/04/01 Servers