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

发布时间 - 2026-01-11 01:10:16    点击率:

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

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

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # 多值运动  # JS多物体 任意值 链式 缓冲运动  # JavaScript运动框架 多物体任意值运动(三)  # JavaScript运动框架 解决防抖动问题、悬浮对联(二)  # JavaScript运动框架 解决速度正负取整问题(一)  # javascript运动框架用法实例分析(实现放大与缩小效果)  # JS运动框架之分享侧边栏动画实例  # Javascript 完美运动框架(逐行分析代码  # 让你轻松了运动的原理)  # js运动框架_包括图片的淡入淡出效果  # JavaScript 创建运动框架的实现代码  # JavaScript运动框架 链式运动到完美运动(五)  # 多个  # 象中  # 都是  # 有个  # 是有  # 遍历  # 设为  # 用了  # 或者是  # 人就  # 一个问题  # 其中一个  # 你得  # 没到  # 大家多多  # 所拥有  # 就好比  # 容易产生  # 几篇  # 最慢 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  如何快速生成专业多端适配建站电话?  如何在Windows 2008云服务器安全搭建网站?  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  b2c电商网站制作流程,b2c水平综合的电商平台?  微信推文制作网站有哪些,怎么做微信推文,急?  利用 Google AI 进行 YouTube 视频 SEO 描述优化  javascript读取文本节点方法小结  如何在IIS7上新建站点并设置安全权限?  Android使用GridView实现日历的简单功能  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  微信小程序 配置文件详细介绍  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  用v-html解决Vue.js渲染中html标签不被解析的问题  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  三星网站视频制作教程下载,三星w23网页如何全屏?  JS实现鼠标移上去显示图片或微信二维码  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何在香港服务器上快速搭建免备案网站?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  微信小程序 五星评分(包括半颗星评分)实例代码  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  如何在云主机上快速搭建多站点网站?  网站建设要注意的标准 促进网站用户好感度!  JavaScript如何实现路由_前端路由原理是什么  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  WEB开发之注册页面验证码倒计时代码的实现  如何用JavaScript实现文本编辑器_光标和选区怎么处理  轻松掌握MySQL函数中的last_insert_id()  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  微信小程序 HTTPS报错整理常见问题及解决方案  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel怎么在Controller之外的地方验证数据  如何在万网利用已有域名快速建站?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel怎么使用Intervention Image库处理图片上传和缩放  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  如何将凡科建站内容保存为本地文件?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑