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 相关文章推荐
基于jquery封装的一个js分页
Nov 15 Javascript
jquery插件制作 提示框插件实现代码
Aug 17 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
Aug 22 Javascript
JavaScript 事件对象介绍
Apr 13 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
Sep 16 Javascript
js代码延迟一定时间后执行一个函数的实例
Feb 15 Javascript
JavaScript注册时密码强度校验代码
Jun 30 Javascript
JavaScript惰性求值的一种实现方法示例
Jan 11 Javascript
react配置antd按需加载的使用
Feb 11 Javascript
微信小程序实现点击卡片 翻转效果
Sep 04 Javascript
单线程JavaScript实现异步过程详解
May 19 Javascript
Antd的table组件表格的序号自增操作
Oct 27 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从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
jQuery EasyUI 页面加载等待及页面等待层
2017/02/06 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
使用npm安装最新版本nodejs
2018/01/18 NodeJs
微信小程序实现发红包功能
2018/07/11 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
js计算两个日期间的天数月的实例代码
2018/09/20 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
[01:07:22]2014 DOTA2华西杯精英邀请赛 5 24 DK VS VG加赛
2014/05/26 DOTA
Python的ORM框架SQLObject入门实例
2014/04/28 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
django创建简单的页面响应实例教程
2019/09/06 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
python画图常规设置方式
2020/03/05 Python
用Python在Excel里画出蒙娜丽莎的方法示例
2020/04/28 Python
浅谈Keras的Sequential与PyTorch的Sequential的区别
2020/06/17 Python
Python中pass的作用与使用教程
2020/11/13 Python
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
先进基层党组织主要事迹材料
2015/11/03 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL
MySQL为id选择合适的数据类型
2021/06/07 MySQL
使用Django框架创建项目
2022/06/10 Python