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 相关文章推荐
Prototype使用指南之form.js
Jan 10 Javascript
网页自动跳转代码收集
Sep 27 Javascript
jQuery-Tools-overlay 使用介绍
Jul 14 Javascript
Js动态添加复选框Checkbox的实例方法
Apr 08 Javascript
jquery的总体架构分析及实现示例详解
Nov 08 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 Javascript
PHP抓取HTTPS内容和错误处理的方法
Sep 30 Javascript
js实现文字列表无缝滚动效果
Jun 23 Javascript
JS实现时间校验的代码
May 25 Javascript
vue渲染方式render和template的区别
Jun 05 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 07 Javascript
Vue自定义全局弹窗组件操作
Aug 11 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
ubuntu 编译安装php 5.3.3+memcache的方法
2010/08/05 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
原生JS封装Ajax插件(同域、jsonp跨域)
2016/05/03 Javascript
jQuery实现select模糊查询(反射机制)
2017/01/14 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
跟老齐学Python之Python安装
2014/09/12 Python
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
python执行get提交的方法
2015/04/29 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
python构建指数平滑预测模型示例
2019/11/21 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
毕业自荐书
2013/12/09 职场文书
地理教师岗位职责
2014/03/16 职场文书
培训协议书范本
2014/04/22 职场文书
销售人员工作自我评价
2014/09/21 职场文书
2014年教师个人工作总结
2014/11/10 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
建党伟业观后感
2015/06/01 职场文书
CSS中em的正确打开方式详解
2021/04/08 HTML / CSS
Python中的min及返回最小值索引的操作
2021/05/10 Python
美元符号 $
2022/02/17 杂记
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers
小喇叭开始广播了! 四十多年前珍贵老照片
2022/05/09 无线电