假如有两个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>

  

js多物体任意值运动的更多相关文章

  1. JS多物体宽度运动案例

    任务 对于每一个Div区块,鼠标移入,宽度逐渐变宽,最宽值为400px,当鼠标移除时,宽度逐渐减小,最小值为100px. 任务提示: (1)多物体运动的定时器需要需要每个物体上同时最多只能开一个定时器 ...

  2. 简单的JS多物体的运动---运动和透明度的变化

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  3. NewtonPrincipia_物体的运动_求向心力

    NewtonPrincipia_物体的运动_求向心力 让我们看一下十七世纪的被苹果砸中的艾萨克,是怎样推导出向心力公式的 在现在的观点看来,其中涉及到的很多没有符号表示的微分量.下面的内容只是叙述了推 ...

  4. three.js中物体旋转实践之房门的打开与关闭

    看这篇博客,默认你已经知道了3D模型实现三维空间内旋转的实现方式(矩阵.欧拉角.四元数). ok,下面正式切入主题,房门的打开和关闭,先上图: 正如你所看到的那样,这个“房门”已经被打开了. 一.th ...

  5. [js]多个物体的运动

    与单个的区别:得知道哪个在动,所以运动函数需要两个参数,出了目标iTarget之外,还要obj.另外需要多个计数器,否则当一个还没运动完就移入另一个物体会发生卡壳 window.onload=func ...

  6. JS之链式运动,及任意值运动框架,包括透明度的改变

    链式运动,顾名思义,一环扣一环,即执行完一个事件后,再接着执行下一个事件,在参数上面动手脚,将下一个要执行的函数名作为一个参数,即利用到回掉函数,下面代码中出现的fn,即回掉函数, function ...

  7. js多物体运动之淡入淡出效果

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  8. 点滴积累【JS】---JS小功能(JS实现多物体缓冲运动)

    效果: 思路: 利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动. 代码: <head ru ...

  9. JS错误记录 - getStyle代替offset、任意值运动框

    本次练习错误总结: 1. 改变border的宽度,属性名称不是直接写border,而是borderWidth. 2. 运动函数 -- 清除定时器 -- 开启新的定时器.  不是在新定时器开启之后再清除 ...

随机推荐

  1. Android Application Fundamentals——Android应用程序基础知识

    Application Fundamentals--应用程序基础知识 Key classes--关键类 Activity Service BroadcastReceiver ContentProvid ...

  2. 英文版Ubuntu安装Fcitx输入法

    在英文环境(LC_CTYPE=en_US.UTF-8)下安装,可按如下配置: 首先,执行 sudo apt-get install fcitx-pinyin im-switch 然后,执行 im-sw ...

  3. ffplay2 android 版正式公布

    项目地址:https://github.com/DeYangLiu/AndroidPlayer/ 下载链接: 看点: 支持软键盘输入和历史记录.使用了EditText和内部存储. 这里考虑了历史记录的 ...

  4. C#关于ref与out的总结

    原文:C#关于ref与out的总结 首先大概说下函数调用的过程,首先为被调用函数分配存储空间(分为代码区和变量区)之后将调用函数传递过来的变量压栈,然后逐一弹栈进行处理,之后进行运算,将需要返回的变量 ...

  5. Notifications(通知)

    通知 通知是能在应用的普通用户界面外显示给用户的一种消息. 当你告诉系统公布一条通知时,它首先在通知栏中表现为一枚图标. 用户打开通知抽屉后就能查看通知的细节了. 通知栏和通知抽屉都是由系统控制的区域 ...

  6. zabbix监控nginx连接状态(转)

    zabbix监控nginx zabbix可以监控nginx的状态,关于一个服务的状态可以查看服务本身的状态(版本号.是否开启),还应该关注服务能力(例如以nginx的负载效果:连接数.请求数和句柄数) ...

  7. WPF界面设计技巧(1)—不规则窗体图文指南

    原文:WPF界面设计技巧(1)-不规则窗体图文指南 初到园子,奉上第一篇入门级教程,请勿见笑. 以往WinForm编程中,实现不规则窗体是有一定难度的,更难的是不规则窗体的边缘抗锯齿及局部透明处理.而 ...

  8. Android于fragment_main.xml文件问题组件收购

    package com.dhy.phonedial; import android.app.Activity; import android.app.Fragment; import android. ...

  9. 用KnockoutJS实现ToDoMVC代码分析

    体验地址 Knockout 版todo web app在线体验 http://todomvc.com/examples/knockoutjs/ 源码地址 项目源码地址,此地址包含了各种JS框架实现的t ...

  10. Linux应用环境实战05:在Ubuntu 14.10中借用Windows的字体 (转)

    阅读目录 设置系统字体 安装微软的英文字体 查看系统的配置文件 借用Windows的字体 编写配置文件 在前一篇随笔中,我详细讨论了字体的分类及用途,也以Fedora 20为例,展示了字体配置的思路和 ...