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系列(10) JavaScript核心(晋级高手必读篇)
Jan 15 Javascript
js库Modernizr的介绍和使用
May 07 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
Nov 24 Javascript
JS之相等操作符详解
Sep 13 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
js选项卡的制作方法
Jan 23 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
Sep 10 jQuery
Vue-cli中为单独页面设置背景色的实现方法
Feb 11 Javascript
layerUI下的绑定事件实例代码
Aug 17 Javascript
django使用channels2.x实现实时通讯
Nov 28 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 Javascript
浅谈微信小程序列表埋点曝光指南
Oct 15 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
一个PHP数组应该有多大的分析
2009/07/30 PHP
使用php来实现网络服务
2009/09/15 PHP
php实现httpRequest的方法
2015/03/13 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
JavaScript 原型继承
2011/12/26 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
JavaScript实现256色转灰度图
2017/02/22 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
React中如何引入Angular组件详解
2018/08/09 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
Python单链表的简单实现方法
2014/09/23 Python
python遍历数组的方法小结
2015/04/30 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
2018/04/21 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
Python函数参数分类原理详解
2020/05/28 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
欧舒丹美国官网:L’Occitane美国
2018/02/23 全球购物
财务人员个人自荐信范文
2013/09/26 职场文书
采购意向书范本
2014/03/31 职场文书
文案策划岗位职责
2015/02/11 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
win10安装配置nginx的过程
2021/03/31 Servers