JavaScript运动框架 多值运动(四)


Posted in Javascript onMay 18, 2017

多值运动,也就是对于某个对象来说,不仅仅只是其中一个属性值在变化,而是好多个,比如宽,高,字体,透明度等等同时变化

当然了,多值运动会产生一个问题,就是定时器何时关闭的问题!当然是所有的属性值都运动到目标值了才能清理定时器,也就是等最慢的。就好比十个人一起聚餐,不能等到来一个人就开吃!

前几篇讲的都是一个元素对象中某一个属性的运动,这次讲同一个元素对象中多个属性值的缓冲运动,那么每个属性都有个终点(目标点),我们把这些属性及其目标值写成一个对象的形式,或者是json状!容易产生的问题就是上面说的,这里用了共同的速度函数,但有的属性值从100 ?> 101, 有的属性值从100 ?> 600,你得等耗时最长的属性值到达目标值才能关闭该obj所拥有的定时器,设计的思路就是每次执行轮询函数设置一个bStob = true;在遍历扫描json中属性的时候,只要有没到到目标值的属性,就设为false,这样定时器就不会关闭,即使有的属性值已经到达终点,此时轮询依旧会执行扫描,只不过此时该属性运动速度为0了,也不会运动了。也就是之前:

if(attr == cur) {
 cleartInterval(obj.timer);
}

要增强为:

if (bStop) {
 clearInterval(obj.timer);
}
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>运动框架(四):多值运动</title>
 <style type="text/css">
 div {
  width: 100px;
  height: 100px;
  background: orange;
  margin: 10px;
  float: left;
 }
 </style>
</head>
<body>
 <div id="div1"></div>

 <script type="text/javascript">
 var oDiv = document.getElementById('div1');
 oDiv.onmouseover = function() {
  var json = {
  width: 600,
  height: 200,
  opacity: 30
  };
  startMove(this, json);
 };
 oDiv.onmouseout = function() {
  var json = {
  width: 100,
  height: 100,
  opacity: 100
  };
  startMove(this, json);
 };
 function getStyle(obj, attr) {
  if (obj.currentStyle) {
  return obj.currentStyle[attr];
  } else {
  return getComputedStyle(obj, false)[attr];
  }
 }

 function startMove(obj, json) {
  clearInterval(obj.timer);
  obj.timer = setInterval(function() {
  var bStop = true;
  for (var attr in json) {
   var cur = 0;
   if (attr === 'opacity') {
   cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
   } else {
   cur = parseInt(getStyle(obj, attr));
   }
   var speed = (json[attr] - cur) / 10;
   speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
   if (cur != json[attr]) {//凡是有未到达目标点的,一律不让定时器停下,否则有的属性不能到达目标值
   bStop = false;
   }
   if (attr === 'opacity') {
   cur += speed;
   obj.style.filter = 'alpha(opacity:' + cur + ')';
   obj.style.opacity = cur / 100;//Chrome,IE
   } else {
   obj.style[attr] = cur + speed + 'px';
   }
  }
  //整个循环结束后,仍然保持着true,说明没有没到达目标值的属性,也就是都到了
  if (bStop) {
   clearInterval(obj.timer);//说明所有的属性都到达了目标值
  }

  }, 30);
 }
 </script>
</body>
</html>

JavaScript运动框架 多值运动(四)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 同时提交多个Web表单的方法
Feb 19 Javascript
jQuery对表单的操作代码集合
Apr 06 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
Feb 10 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
jQuery表格插件datatables用法详解
Nov 23 Javascript
Javascript函数中的arguments.callee用法实例分析
Sep 16 Javascript
AngularJS入门教程之多视图切换用法示例
Nov 02 Javascript
jquery html5 视频播放控制代码
Nov 06 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
Apr 09 Javascript
微信小程序实现的一键拨号功能示例
Apr 24 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
微信小程序页面开发注意事项整理
May 18 #Javascript
基于BootStrap的前端分页带省略号和上下页效果
May 18 #Javascript
微信小程序网络请求wx.request详解及实例
May 18 #Javascript
微信小程序实现锚点定位楼层跳跃的实例
May 18 #Javascript
Vue2 使用 Echarts 创建图表实例代码
May 18 #Javascript
AngularJS折叠菜单实现方法示例
May 18 #Javascript
jQuery Validate 校验多个相同name的方法
May 18 #jQuery
You might like
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
PHP MVC框架skymvc支持多文件上传
2016/05/26 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
5款Javascript颜色选择器
2009/10/25 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
2019/01/30 Javascript
深入解析Python中的lambda表达式的用法
2015/08/28 Python
浅谈python类属性的访问、设置和删除方法
2016/07/25 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
Python使用pickle模块存储数据报错解决示例代码
2018/01/26 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
python使用xlrd和xlwt读写Excel文件的实例代码
2018/09/05 Python
Python实现FTP文件传输的实例
2019/07/07 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
Python中*args和**kwargs的区别详解
2019/09/17 Python
利用python读取YUV文件 转RGB 8bit/10bit通用
2019/12/09 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
解决margin 外边距合并问题
2019/07/03 HTML / CSS
美国运动鞋和运动服零售商:Footaction
2017/04/07 全球购物
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
2014年安全生产目标责任书
2014/07/23 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
学生评语集锦
2015/01/04 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android