Javascript 可同时变大变宽等一系列效果运动框架

页面导航:首页 > 网络编程 > JavaScript > Javascript 可同时变大变宽等一系列效果运动框架

Javascript 可同时变大变宽等一系列效果运动框架

来源: 作者: 时间:2016-02-04 09:15 【

等待已久的可变大,变宽 等一系列效果运动框架出炉了,现在还是个初级版本,能满足需求。我们看看是如何实现的。我们知道在Javascript 中 lsquo; rsquo;等同于 lsquo;[]rsquo; 例如: oDiv sty
等待已久的可变大,变宽 等一系列效果运动框架出炉了,现在还是个初级版本,能满足需求。我们看看是如何实现的。
 
我们知道在script 中 ‘.’等同于 ‘[]’ 例如: 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.onmouver = 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); 即可
 
原理就是把小数干掉,留下整数的部分就可以了。
Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<