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对象是否可用的最正确方法分析
Oct 03 Javascript
Javascript读取cookie函数代码
Oct 16 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
Dec 21 Javascript
用jquery模仿的a的title属性的例子
Oct 22 Javascript
js实现Select下拉框具有输入功能的方法
Feb 06 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
Vue.js 中的 v-show 指令及用法详解
Nov 19 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
Mar 11 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
Sep 06 Javascript
浏览器JavaScript调试功能无法使用解决方案
Sep 18 Javascript
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
如何用JS实现简单的数据监听
May 06 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
php getsiteurl()函数
2009/09/05 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
js jquery做的图片连续滚动代码
2008/01/06 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
jquery中使用$(#form).submit()重写提交表单无效原因分析及解决
2013/03/25 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
jQuery通过deferred对象管理ajax异步
2016/05/20 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
2019/09/06 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
python统计文本字符串里单词出现频率的方法
2015/05/26 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
英国独特的时尚和生活方式品牌:JOY
2018/03/17 全球购物
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
安全员岗位职责
2013/11/11 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
银行培训心得体会范文
2016/01/09 职场文书
小学秋季运动会加油口号及加油稿
2019/08/19 职场文书
Python基础之Socket通信原理
2021/04/22 Python
Python万能模板案例之matplotlib绘制甘特图
2022/04/13 Python