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之可拖动的iframe效果代码
Aug 01 Javascript
拖拉表格的JS函数
Nov 20 Javascript
jQuery Tools tab(幻灯片)
Jul 14 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
SVG描边动画
Feb 23 Javascript
JavaScript实现网页头部进度条刷新
Apr 16 Javascript
React Native 搭建开发环境的方法步骤
Oct 30 Javascript
Angular6 正则表达式允许输入部分中文字符
Sep 10 Javascript
在Vue中使用axios请求拦截的实现方法
Oct 25 Javascript
vue项目在webpack2实现移动端字体自适配功能
Jun 02 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
Sep 04 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
Oct 28 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为php增加openssl模块的方法
2011/06/14 PHP
php对大文件进行读取操作的实现代码
2013/01/23 PHP
php session劫持和防范的方法
2013/11/12 PHP
基于PHP实现短信验证码接口(容联运通讯)
2016/09/06 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
js location.replace与location.reload的区别
2010/09/08 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
将字符串中由空格隔开的每个单词首字母大写
2014/04/06 Javascript
node.js入门教程
2014/06/01 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
微信小程序保存图片到相册权限设置
2020/04/09 Javascript
小程序实现图片移动缩放效果
2020/05/26 Javascript
Python模拟百度登录实例详解
2016/01/20 Python
Python 转义字符详细介绍
2017/03/21 Python
基于Python闭包及其作用域详解
2017/08/28 Python
Django 构建模板form表单的两种方法
2020/06/14 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
二手车转让协议书
2015/01/29 职场文书
运动会广播稿100字
2015/08/19 职场文书
Java线程的6种状态与生命周期
2022/05/11 Java/Android