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 相关文章推荐
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
Apr 20 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
Dec 10 Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 Javascript
纯Javascript实现ping功能的方法
Mar 20 Javascript
使用vue.js开发时一些注意事项
Apr 27 Javascript
JS创建对象的写法示例
Nov 04 Javascript
JavaScript实现图片无缝滚动效果
Jul 07 Javascript
vue使用drag与drop实现拖拽的示例代码
Sep 07 Javascript
详解Axios统一错误处理与后置
Sep 26 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
swiper Scrollbar滚动条组件详解
Sep 08 Javascript
将RGB值转换为灰度值的简单算法
Oct 09 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
用户的详细注册和判断
2006/10/09 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
Yii2下session跨域名共存的解决方案
2017/02/04 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
java必学必会之static关键字
2015/12/03 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
Python制作exe文件简单流程
2019/01/24 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Python利用matplotlib绘制散点图的新手教程
2020/11/05 Python
Django中template for如何使用方法
2021/01/31 Python
英国领先的独立酒精饮料零售商:DrinkSupermarket
2021/01/13 全球购物
DIY手工制作经营店创业计划书
2014/02/01 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
《冬阳童年骆驼队》教学反思
2014/04/15 职场文书
运动会报道稿300字
2014/10/02 职场文书
健康状况证明模板
2014/10/23 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
MySQL创建表操作命令分享
2022/03/25 MySQL