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 导出数据到Excel(处理table中的元素)
Dec 18 Javascript
JS中mouseover和mouseout多次触发问题如何解决
Jun 06 Javascript
JS中使用DOM来控制HTML元素
Jul 31 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
基于JavaScript实现焦点图轮播效果
Mar 27 Javascript
Vue2.0 UI框架ElementUI使用方法详解
Apr 14 Javascript
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
Vue自定义指令使用方法详解
Aug 21 Javascript
Gulp实现静态网页模块化的方法详解
Jan 09 Javascript
JavaScript刷新页面的几种方法总结
Mar 28 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
Sep 21 Javascript
微信小程序用canvas画图并分享
Mar 09 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 $_SERVER详解
2009/01/16 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
将HTML自动转为JS代码
2006/06/26 Javascript
js下通过prototype扩展实现indexOf的代码
2010/12/08 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
vue渲染时闪烁{{}}的问题及解决方法
2018/03/28 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
python显示生日是星期几的方法
2015/05/27 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
wxPython的安装与使用教程
2018/08/31 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
Python实现简单的2048小游戏
2021/03/01 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
C/C++程序员常见面试题一
2012/12/08 面试题
创意广告词
2014/03/17 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
小米11和iphone12哪个值得买?小米11对比iphone12评测
2021/04/21 数码科技
MySQL快速插入一亿测试数据
2021/06/23 MySQL
python保存图片的四个常用方法
2022/02/28 Python
Oracle数据库事务的开启与结束详解
2022/06/25 Oracle