JavaScript运动框架 多物体任意值运动(三)


Posted in Javascript onMay 17, 2017

前面两篇都是单物体的运动,本文开始讲多物体的运动,比如多个div的各自不同的属性如宽,高,字体大小,透明度的缓冲运动变化。

从本文起,就不再使用offsetWdith,offsetHeight了等等,因为会出现问题,比如加个border,offsetWidth就会出现严重问题,参见我个人的博客JavaScript中offsetWidth的'bug'及其对策解决方案就是封装getStyle(obj, attr) 函数,用了获取运动中的当前值!

function getStyle(obj, name) {
 if(obj.currentStyle) {//IE
 return obj.currentStyle[name];
 } else {
 return getComputedStyle(obj, false)[name];
 }
}

既然是各个物体各自运动,那么他们之间有些变量就不能共享,比如定时器,每个对象都应有自己的定时器,因为每次启动定时器的时候先要清除上一个定时器,这就导致如果第一个物体还在运动,就把鼠标移动到第二个物体,瞬间清除上个定时器,导致第一个物体的运动不能运动到目标值就停下

另外,物体运动的样式,基本上就两类:一类是大小也就是px为单位的属性,还有一类就是透明度!

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>运动框架(三):多物体运动</title>
 <style type="text/css">
 div {
 width: 100px;
 height: 100px;
 background: yellow;
 margin: 10px;
 float: left;
 filter: alpha(opacity:100);
 opacity: 1;
 }
 </style>
</head>
<body>
 <div id="div1">变高</div>
 <div id="div2">变宽</div>
 <div id="div3">fontSize Changed</div>
 <div id="div4">alpha</div>

 <script type="text/javascript">
 var doc = document;
 var oDiv1 = doc.getElementById('div1');
 oDiv1.onmouseover = function() {
 startMove(this, 'height', 300);
 };
 oDiv1.onmouseout = function() {
 startMove(this, 'height', 100);
 };

 var oDiv2 = doc.getElementById('div2');
 oDiv2.onmouseover = function() {
 startMove(this, 'width', 300);
 };
 oDiv2.onmouseout = function() {
 startMove(this, 'width', 100);
 };

 var oDiv3 = doc.getElementById('div3');
 oDiv3.onmouseover = function() {
 startMove(this, 'fontSize', 30);
 };
 oDiv3.onmouseout = function() {
 startMove(this, 'fontSize', 16);
 };

 var oDiv4 = doc.getElementById('div4');
 oDiv4.onmouseover = function() {
 startMove(this, 'opacity', 30);
 };
 oDiv4.onmouseout = function() {
 startMove(this, 'opacity', 100);
 };


 function getStyle(obj, attr) {
 if (obj.currentStyle) {
 return obj.currentStyle[attr];
 } else {
 return getComputedStyle(obj, null)[attr];
 }
 }

 function startMove(obj, attr, iTarget) {
 clearInterval(obj.timer);
 obj.timer = setInterval(function() {
 var cur = 0;
 if (attr === 'opacity') {
  cur = parseFloat(getStyle(obj, attr)) * 100;
 } else {
  cur = parseInt(getStyle(obj, attr));
 }
 var speed = (iTarget - cur) / 10;
 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
 if (iTarget == cur) {
  clearInterval(obj.timer);
 } else {
  if (attr === 'opacity') {
  cur += speed;
  obj.style.filter = 'alpha(opacity:' + cur + ')';
  obj.style.opacity = cur / 100;//FireFox && Chrome
  } else {
  cur += speed;
  obj.style[attr] = cur + 'px'; 
  }

 }
 }, 30);
 }

 </script>
</body>
</html>

JavaScript运动框架 多物体任意值运动(三)

JavaScript运动框架 多物体任意值运动(三)

JavaScript运动框架 多物体任意值运动(三)

JavaScript运动框架 多物体任意值运动(三)

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

Javascript 相关文章推荐
12个非常有创意的JavaScript小游戏
Mar 18 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
Apr 02 Javascript
在JS数组特定索引处指定位置插入元素
Jul 27 Javascript
很全面的JavaScript常用功能汇总集合
Jan 22 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
May 16 Javascript
Vue自定义图片懒加载指令v-lazyload详解
Dec 31 Javascript
基于BootStrap的文本编辑器组件Summernote
Oct 27 Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 Javascript
基于vue实现滚动条滚动到指定位置对应位置数字进行tween特效
Apr 18 Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
May 30 Javascript
浅谈Vue的响应式原理
May 30 Javascript
vue中element 的upload组件发送请求给后端操作
Sep 07 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
May 17 #Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
May 17 #Javascript
vue之nextTick全面解析
May 17 #Javascript
Vue.js学习教程之列表渲染详解
May 17 #Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 #Javascript
深入理解Commonjs规范及Node模块实现
May 17 #Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
May 17 #Javascript
You might like
根德Grundig S400/S500/S700电路分析
2021/03/02 无线电
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
smarty中js的调用方法示例
2014/10/27 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
调试WordPress中定时任务的相关PHP脚本示例
2015/12/10 PHP
PHP利用curl发送HTTP请求的实例代码
2020/07/09 PHP
javascript引用对象的方法
2007/01/11 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
JavaScript实现大数的运算
2014/11/24 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
jquery.rotate.js实现可选抽奖次数和中奖内容的转盘抽奖代码
2017/08/23 jQuery
create-react-app构建项目慢的解决方法
2018/03/14 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
python通过pil将图片转换成黑白效果的方法
2015/03/16 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
Python的argparse库使用详解
2018/10/09 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
Python配置pip国内镜像源的实现
2020/08/20 Python
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
教师校本培训方案
2014/02/26 职场文书
地理教师岗位职责
2014/03/16 职场文书
中学学校门卫岗位职责
2014/08/15 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
党员进社区活动总结
2015/05/07 职场文书
goland 设置project gopath的操作
2021/05/06 Golang
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript