网络编程
位置:首页>> 网络编程>> JavaScript>> JavaScript运动框架 多值运动(四)

JavaScript运动框架 多值运动(四)

作者:GY_U_YG  发布时间:2023-09-08 01:44:51 

标签:js,多值运动

多值运动,也就是对于某个对象来说,不仅仅只是其中一个属性值在变化,而是好多个,比如宽,高,字体,透明度等等同时变化

当然了,多值运动会产生一个问题,就是定时器何时关闭的问题!当然是所有的属性值都运动到目标值了才能清理定时器,也就是等最慢的。就好比十个人一起聚餐,不能等到来一个人就开吃!

前几篇讲的都是一个元素对象中某一个属性的运动,这次讲同一个元素对象中多个属性值的缓冲运动,那么每个属性都有个终点(目标点),我们把这些属性及其目标值写成一个对象的形式,或者是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运动框架 多值运动(四)

0
投稿

猜你喜欢

  • 抛出的异常信息:异常详细信息: System.ArgumentOutOfRangeException: “ddlTotalCostDisco
  • “博客就像一本书”这话其实几个月前深圳FB时就有扯到,这也不是什么新概念,也许本身就应该是这样。打个比方,当你拿到一本未看过的书时,理论上你
  • 本文介绍 SQL Server 2000 企业版的新功能 - 索引视图。讲解索引视图并讨论一些提高性能的具体方案。什么是索引视图?许多年来,
  • 阅读前:Pro Javascript Techniques翻译连载说明和目录JavaScript的演化是渐进而稳固的。历经过去十年的进程,J
  • var InterestKeywordListString = $("#userInterestKeywordLabel"
  • 很多时候,希望能够在 HTML 中使用空格排版。但浏览器在解析 HTML 时,会把连续的空格解析成一个,所以我们会使用 &nbsp;
  • 首先说说什么是内存泄露,在一个进程中,如果某一块内存无法访问,且直到进程结束为止也无法释放,那么就发生了内存泄露。通常这种情况发生在C++之
  • 移动互联网被称为“第五次科技革命”,而随着iPhone和Android等智能手机的日渐流行和iPad等平板电脑的出现,移动互联网的潜力和趋势
  • 从技术上来说,在ASP环境中,读入并管理XML文本的主要方法有三种: 创建MSXML对象,并且将XML文档载入DOM; 使用服务器端嵌入(S
  • python是个很好玩的东西?好吧我随口说的,反正因为各种原因(其实到底是啥我也不知道),简单的学习了下python,然后写了一个上传文件上
  • python 根据正则表达式提取指定的内容正则表达式是极其强大的,利用正则表达式来提取想要的内容是很方便的事。  下面演
  • Eric A. Meyer 对基于 Web 标准的 CSS 与 HTML 绝非一知半解,他是这个领域杰出的专家,曾写过不少 CSS 方面的书
  • 过去一段时间人们似乎又非常热衷于探讨网络文档的印刷格式,涌现了很多与之相关的技术与理论资料,其中相当重要的一个领域就是关于印刷中字号和行高的
  • 前几天,酋长同学在日志里提到了关于Google宽松的管理制度,一个产品任务下来是没有时间限制的,Google深信在有时间限制下的产品肯定是不
  • show tables或show tables from database_name;解释:显示当前数据库中所有表的名称show datab
  • PDOStatement::setAttributePDOStatement::setAttribute — 设置一个语句属性(PHP 5
  • 作为设计主管,Peter Stern 已经领导 microsoft.com 重新设计了主页并且开发了五个不同的交互工具,这些工具被用于下载中
  • 树形目录显示程序问题描述:在我们项目中常常会出现自关联的数据表,如果我们从整体看去,整个表就呈现为一个树形数据结构(对于复杂的情况,它可能变
  • HTTP Request的Header信息1、HTTP请求方式如下表:GET向Web服务器请求一个文件POST向Web服务器发送数据让Web
  • 可能有些地方翻译得不好,请见谅在这个冠冕堂皇的标题之下,我想回答一个土方,有人在博客提出很久了。该土方很好的描述了很多图标设计师所面临的典型
手机版 网络编程 asp之家 www.aspxhome.com