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 相关文章推荐
javascript StringBuilder类实现
Dec 22 Javascript
JavaScript Array扩展实现代码
Oct 14 Javascript
使用jquery实现IE下按backspace相当于返回操作
Mar 18 Javascript
js使用DOM操作实现简单留言板的方法
Apr 10 Javascript
JavaScript与HTML的结合方法详解
Nov 23 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
Jun 16 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
Jun 24 Javascript
windows下更新npm和node的方法
Nov 30 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
Sep 14 Javascript
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
15个值得收藏的JavaScript函数
Sep 15 Javascript
Javascript的promise,async和await的区别详解
Mar 24 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
PHP高级OOP技术演示
2009/08/27 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
2011/05/14 PHP
PHP header函数分析详解
2011/08/06 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
经验几则 推荐
2006/09/05 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
jquery对表单操作2
2011/04/06 Javascript
js模仿windows桌面图标排列算法具体实现(附图)
2013/06/16 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
jQuery中noconflict函数的实现原理分解
2015/02/03 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
微信小程序实现手势图案锁屏功能
2018/01/30 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
渔夫的故事教学反思
2014/02/14 职场文书
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
MySQL sql模式设置引起的问题
2022/05/15 MySQL
MySql数据库触发器使用教程
2022/06/01 MySQL