Javascript 可同时变大边框等一系列效果运动框架——逐行分析代码,让你轻松了运动的原理

等待已久的可同时变大边框等一系列效果运动框架出炉了,现在还是个初级版本,能满足需求。我们看看是如何实现的。

我们知道在Javascript 中 ‘.’等同于 ‘[]’ 例如: oDiv.style.height=oDiv.style[‘height’]

那么,我们把要运动的属性作为一个参数,传入到之前函数中即可。

透明度呢,需要单独处理,判断下即可。

直接上代码。

<style type="text/css">
            div {
                width: 200px;
                height: 200px;
                margin: 20px;
                float: left;
                background: yellow;
                border: 1px solid #CCCCFF;
                filter: alpha(opacity=30);
                opacity: 0.3;
            }
        </style>
<body>
        <div id="div1"></div>

    </body>

以下是Javascript代码:

<script type="text/javascript">
            window.onload = function() {
                var oDiv1 = document.getElementById("div1");

                oDiv1.onmouseover = function() {
                    startMove(this, ‘opacity‘, 100);
                };
                oDiv1.onmouseout = function() {
                    startMove(this, ‘opacity‘, 30);
                };

            }

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

            function startMove(obj, attr, iTarget) {
                clearInterval(obj.time);

                obj.time = setInterval(function() {
                    var cur = 0;

                    if (attr == ‘opacity‘) {
                        cur=parseFloat(getStyle(obj, attr)) * 100;
                    } else {
                        cur = parseInt(getStyle(obj, attr));
                    }

                    var speed = (iTarget - cur) / 6;

                    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

                    if (cur == iTarget) {
                        clearInterval(this.time);
                    } else {
                        if (attr == ‘opacity‘) {
                            obj.style.filter = ‘alpha(opacity=‘ + cur + speed + ‘)‘;
                            obj.style.opacity = (cur + speed) / 100;
                        } else {
                            obj.style[attr] = cur + speed + ‘px‘;
                        }
                    }
                }, 30);
            }
        </script>

结合之前的博文中的知识,相信里面的一些计算原理大家都了如指掌,无需多说了吧。不懂可以回顾下之前的文章。

那么 这个运动框架到目前为止就没问题了吗?

不要急 这个还是有问题的 在IE7 下就会出现bug 。。 怎么会事呢 。

其实Javascript 中的运算是有误差的,alert(0.07*100);  // 7.000000000….1

那么我们的代码中 parseFloat(getStyle(obj, attr)) * 100这句就会有误差。

这个问题怎么解决呢??

其实很简单,用 Math.round() ;   改掉相应的代码

cur=parseFloat(getStyle(obj, attr)) * 100;

改成 cur = Math.round(parseFloat(getStyle(obj, attr)) * 100); 即可

原理就是把小数干掉,留下整数的部分就可以了。

时间: 2024-10-25 21:58:21

Javascript 可同时变大边框等一系列效果运动框架——逐行分析代码,让你轻松了运动的原理的相关文章

Javascript 链式运动框架——逐行分析代码,让你轻松了运动的原理

所谓链式运动,就是一环扣一环.我们的很多运动实际上来说指的就是分阶段的,第一个阶段动完,下个阶段开始动.这个链式运动框架就是用来处理这些问题的. 我们先来看下之前的运动框架,以下是Javascript 代码 function getStyle(obj, name) { if (obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, null)[name]; } } funct

Javascript 完美运动框架——逐行分析代码,让你轻松了解运动的原理

大家一听这名字就知道,有了这套框架 网上的效果基本都是可以实现的.实际上之前的运动框架还是有局限性的,就是不能让好几个值一块运动. 那这个问题怎么解决呢? 我们先来看看之前的运动框架 function getStyle(obj, name) { if (obj.currentStyle) { return obj.currentStyle[name]; } else { return getComputedStyle(obj, null)[name]; } } function startMov

Javascript 学习笔记 缓冲运动——逐行分析代码,让你轻松了解缓冲运动的原理

看过上一篇关于Javascript 匀速运动文章的朋友相信对于运动已经有了初步的了解 接下来 讲一下关于缓冲运动的原理 ,我会逐行分析代码,代码简单易懂,能马上理解其中的原理,适用于初学者. #div1 { width: 100px; height: 100px; position: absolute; background: red; top: 50px; left: 0; /*600 初始值*/ } #div2 { width: 1px; height: 300px; position: a

Javascript 匀速运动停止条件——逐行分析代码,让你轻松了运动的原理

原文:Javascript 匀速运动停止条件--逐行分析代码,让你轻松了运动的原理 我们先来看下之前的匀速运动的代码,修改了速度speed后会出现怎么样的一个bug.这里加了两个标杆用于测试 <style type="text/css"> #div1 { width: 100px; height: 100px; position: absolute; background: red; top: 50px; left: 600px; } #div2 { width: 1px;

Javascript 多物体运动——逐行分析代码,让你轻松了运动的原理

我们先来看下之前的运动的代码,是否支持多物体运动,会出现怎么样的问题. <style type="text/css"> div { width: 100px; height: 50px; background: red; margin: 10px; } </style> <body> <div></div> <div></div> <div></div> </body>

Javascript 拖拽的一些简单的应用——逐行分析代码,让你轻松了解拖拽的原理

今天我们来看看如何让拖拽的物体不能拖出某个div之外和拖拽的吸附功能 上次讲到我们的拖拽是不可拖出可视区范围的,在这基础上我们加个父级的div,不让他拖出父级.原理和之前的一样,简单吧. <style type="text/css"> #div1 { width: 100px; height: 100px; background: red; position: absolute; } #div2 { width: 400px; height: 300px; backgrou

Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理

我们看看之前的拖拽在周围有东西的时候会出现什么问题? 在高级浏览器中不会有啥问题,我们放到IE7下面测试一下,问题就出来了.如图 我们可以很清楚的看到,文字都已经被选中了.那这个用户体验很不好,用起来也不方便.顺便提一下,我们之前加了一个return false;帮我们解决了很多问题,如果去掉这个的话,chrome也会出现一样的问题.那么也就是说这个return false;可以解决chrome ff IE9+ 这些浏览器的问题. 实际上在我们开发中,页面上会有许多的元素组成,不可能就一个div

Javascript 拖拽雏形中的一些问题——逐行分析代码,让你轻松了拖拽的原理

今天我们就来解决上一次拖拽雏形中的一些问题.下面看看有哪些问题? 附上上期的Javascript代码,方便大家查看问题. <script type="text/javascript"> window.onload = function() { var oDiv = document.getElementById("div1"); var disX = 0; var disY = 0; oDiv.onmousedown = function(ev) { v

Javascript 拖拽雏形——逐行分析代码,让你轻松了拖拽的原理

拖拽的原理: 其实就是鼠标与左上角的距离保持不变.我们来看下图, 这红点就是鼠标.拖拽拖拽实际上来说就是通过鼠标的位置来计算物体的位置,就是这么简单,就是这么任性. 那这个距离怎么求呢?? 鼠标的位置-物体位置的差值就是那个距离 是吧.那这个斜线就是横线和竖线组成的. 我们距离看下程序怎么做. /*实际上他改的就是某个div 的left top ,那他就动起来了. 那样式中肯定要有绝对定位是吧.*/ <style type="text/css"> #div1 { width