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 新手24条实用建议[TUTS+]
Jun 21 Javascript
js不能跳转到上一页面的问题解决方法
Mar 01 Javascript
微信小程序 action-sheet底部菜单详解
Oct 27 Javascript
js 实现获取name 相同的页面元素并循环遍历的方法
Feb 14 Javascript
JS对象创建的几种方式整理
Feb 28 Javascript
微信小程序实战之自定义toast(6)
Apr 18 Javascript
Vue实现购物车功能
Apr 27 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
基于jQuery的表单填充实例
Aug 22 jQuery
Scala解析Json字符串的实例详解
Oct 11 Javascript
vue.js 微信支付前端代码分享
Feb 10 Javascript
微信小程序实现带缩略图轮播效果
Nov 04 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
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
2018/10/31 PHP
jQuery获取样式中的背景颜色属性值/颜色值
2012/12/17 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
token 机制和实现方式
2020/12/15 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python中functools模块函数解析
2017/03/12 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python3 修改默认环境的方法
2019/02/16 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python 安装库几种方法之cmd,anaconda,pycharm详解
2020/04/08 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
详解Pandas 处理缺失值指令大全
2020/07/30 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
日本著名的平价时尚女性购物网站:Fifth
2016/08/24 全球购物
三分钟英语演讲稿
2014/04/24 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
财务负责人岗位职责
2015/02/03 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
食堂卫生管理制度
2015/08/04 职场文书