js多物体任意值运动
假如有两个div,一个div要变宽,一个div要变高,你怎么写呢?
哎呀,写2个方法啊,一个控制div1变宽,一个控制div2变高啊
那么你的代码,是不是下面这样的呢!
示例:Div变宽和变高
现象:div1在onmouseover时变宽,onmouseout时恢复原大小;
div2在onmouseover时变高,onmouseout时恢复原大小
缺点:重复的代码写了好几个方法
html部分
<div id="div1"></div> <div id="div2"></div> <style> div { width:100px; height:150px; margin:20px; background:green;} </style>
js部分
<script>window.onload = function(){var oDiv1 = document.getElementById("div1");var oDiv2 = document.getElementById("div2");oDiv1.onmouseover = function(){startMove1(this,300);}oDiv1.onmouseout = function(){startMove1(this,100);}oDiv2.onmouseover = function(){startMove2(this,300);}oDiv2.onmouseout = function(){startMove2(this,150);}}function startMove1(obj,iTarget){clearInterval(obj.timer);obj.timer = setInterval(function(){var speed = (iTarget - obj.offsetWidth)/6;speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);if(obj.offsetWidth == iTarget){clearInterval(obj.timer);} else {obj.style.width = obj.offsetWidth + speed + "px";}},30);
}function startMove2(obj,iTarget){clearInterval(obj.timer);obj.timer = setInterval(function(){var speed = (iTarget - obj.offsetHeight)/6;speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);if(obj.offsetHeight == iTarget){clearInterval(obj.timer);} else {obj.style.height = obj.offsetHeight + speed + "px";}},30);
}</script>
额,上面的代码,本来是一个运动框架的,却写了两个类似的方法。
而且还使用了offset,这是有缺陷的啊
那么,可不可以用一个方法就解决这个问题了呢。
可以的
回想 js你真的了解offsetWidth吗,有没有给我们带来什么启发呢?
http://www.cnblogs.com/huaci/p/3863797.html
对了,利用function getStyle(obj,name),我们就可以控制多个属性值的改变啦
原理:var attr= parseInt(getStyle(obj,name));
修改后的完整代码,如下:
js部分
<script>window.onload = function(){var oDiv1 = document.getElementById("div1");var oDiv2 = document.getElementById("div2");oDiv1.onmouseover = function(){startMove(this,"width",300);}oDiv1.onmouseout = function(){startMove(this,"width",100);}oDiv2.onmouseover = function(){startMove(this,"height",300);}oDiv2.onmouseout = function(){startMove(this,"height",150);}}function startMove(obj,name,iTarget){clearInterval(obj.timer);obj.timer = setInterval(function(){var attr = parseInt(getStyle(obj,name));var speed = (iTarget - attr)/6;speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);if(attr == iTarget){clearInterval(obj.timer);} else {obj.style[name] = attr + speed + "px";}},30);
}function getStyle(obj,name){if(obj.currentStyle){return obj.currentStyle[name];} else{getComputed(obj,null)[name];}}</script>
转载于:https://www.cnblogs.com/huaci/p/3866361.html
js多物体任意值运动相关推荐
- JS任意元素的任意值运动
函数原型startMove(obj,name,iTag); 例如: startMove(obj,'width',400);//width运动到width:400px startMove(obj,'he ...
- JavaScriptDay08:js运动基础,单物体运动框架,多物体运动框架,改变单一任意值运动框架,改变多值运动框架,完美运动框架
目录 0x00 js的运动基础 0x01 单物体运动框架 0x02 多物体运动框架 0x03 改变单一任意值运动框架 0x04 链式运动框架 0x05 改变多值运动框架 0x06 完美运动框架 0x0 ...
- js改变宽高字体大小透明度多物体模块运动
改变宽高字体大小透明度 #div1 { width: 100px; height: 100px; background: red; margin: 10px; filter:alpha(opactiy ...
- Three.js 后期处理-物体边界线条高亮处理-OutlinePass
Three.js 后期处理-物体边界线条高亮处理-OutlinePass 概述 步骤 概述 本文介绍如何使用three.js的后期处理来制作物体边界线条高亮处理,先来看效果图 步骤 添加相应的后期处理 ...
- 【Unity入门】10.物体的运动
[Unity入门]物体的运动 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)用脚本驱动物体移动 (1)制作一台运动的小车 ...
- 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)
效果: 思路: 利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动. 代码: 1 <head ...
- js实现左右来回运动效果实例
实现js基础运动那么一定要了解css的定位方式position分为固定定位fixed .relative .absolute fixed 固定元素在页面上 relative 绝对定位 不会脱标 abs ...
- pygame里面物体闪烁运动_教师资格【试讲示范】高中物理试讲答辩——《自由落体运动》试讲稿答辩...
试讲备课纸 教学过程 各位考官: 大家好,我是高中物理组的***号考生,我试讲的题目是<自由落体运动>,下面开始我的试讲. 一.导入新课 同学们,老师手里现在拿着一个小笔记本和一张纸,现在 ...
- pygame里面物体闪烁运动_利用自闪烁发光二极管探究小车在倾斜轨道上的运动规律...
2020年11月23日,周一,24小时安全值班.利用当班中午的时间,微主在创客空间测试了自闪烁发光二极管在匀加速运动中的效果,结果还比较满意. 将小车放置在倾斜的轨道上,将自闪烁发光二极管和纽扣电池构 ...
- 【原生JS组件】javascript 运动框架
大家都知道JQuerry有animate方法来给DOM元素进行运动,CSS3中也有transition.transform来进行运动.而使用原生的Javascript来控制元素运动,须要写非常多运动的 ...
最新文章
- JVM - 剖析Java对象头Object Header之对象大小
- MATLAB机器学习系列-9:决策树和随机森林的原理及其例子代码实现
- 数据仓库之电商数仓-- 4、可视化报表Superset
- python2.7输出语句_python2.7入门---模块(Module)
- CentOS 开机自启动配置方法
- js 点击闭包_【新年跳槽必备】2020最新(前端原生JS专题)面试题 速领!
- [20171113]修改表结构删除列相关问题2.txt
- 关于 Mac OS系统中编程时出现的segment error 和bus error原因描述
- Mysql支持的数据类型
- teamviewer JAVA,安装teamviewer失败 更换本地源
- 网银“交易密码丢失U盾作废”引质疑
- Vue - 将金额数字转为汉字大写(demo)
- 将1自动补位为01_自动补位为辅助后游戏就输了一半?那是你不懂辅助的正确打开方式...
- 经验分享:如何系统学习 Web 前端技术?
- hge引擎配置登录器教程_Hge引擎程序+登录器配置器+配套工具+全套入门教程
- 【centos7静默(无图形界面版)本地离线安装oracle11g,附带个人建议】
- 科技周刊第五期:科学技术在发展中的作用
- Java银行卡校验API
- 未明学院:猪年第一弹,未明学员斩获多枚世界名校offer!
- 2021年广东省安全员B证第三批(项目负责人)考试及广东省安全员B证第三批(项目负责人)最新解析
热门文章
- IOS transform的使用(移动,放大,旋转)
- android 2.3 webView select控件 无法及时显示optionLabel的BUG
- Vbox导入已经安装好的Redhat系统 重启网卡 提示 “Device eth0 does not seem to be present, delaying initialization.”...
- IAR下STM32工程建立基本步骤
- 重磅!Google ARCore 和京东 AR 联合举办消费应用创新大赛
- PDF怎么在线合并为一个文件
- Android多进程之Binder的意外死亡及权限校验
- CentOS 7忘记root密码解决办法
- spring云化架构迁移 (一)
- RK30SDK开发板驱动分析(一):platform device 的概念与注册