Js扩张效果

内容纲要

Javascript代码写起来太繁杂了!!!想转用 Actionscript !!

<!DOCTYPE html>
<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>扩张效果</title>
        <style type="text/css">
            <!-- #apDiv1 {
                position: absolute;
                left: 300px;
                top: 100px;
                width: 100px;
                height: 100px;
                z-index: 1;
                background-color: #FF00FF;
            }

            #apDiv2 {
                position: absolute;
                left: 402px;
                top: 100px;
                width: 100px;
                height: 100px;
                z-index: 2;
                background-color: #00FFFF;
            }

            #apDiv3 {
                position: absolute;
                left: 402px;
                top: 200px;
                width: 100px;
                height: 100px;
                z-index: 3;
                background-color: #99FF00;
            }

            #apDiv4 {
                position: absolute;
                left: 300px;
                top: 200px;
                width: 100px;
                height: 100px;
                z-index: 4;
                background-color: #FFFF00;
            }

            -->
        </style>
    </head>

    <body>
        <div id="apDiv1"></div>
        <div id="apDiv2"></div>
        <div id="apDiv3"></div>
        <div id="apDiv4"></div>

        <script language="javascript" type="text/javascript">
            function $(pId) {
                return document.getElementById(pId);
            }

            function IPos() {

            }

            IPos.getAbsPos = function(pTarget) {
                var _x = 0;
                var _y = 0;
                while(pTarget.offsetParent) {
                    _x += pTarget.offsetLeft;
                    _y += pTarget.offsetTop;
                    pTarget = pTarget.offsetParent;
                }
                _x += pTarget.offsetLeft;
                _y += pTarget.offsetTop;

                return {
                    x: _x,
                    y: _y
                };
            }

            function JAniObj() {
                this.obj = null;
                this.interval = null;

                this.orgPos = null;
                this.targetPos = null;

                this.orgSize = {
                    w: 50,
                    y: 50
                }; //初始长宽  
                this.targetSize = {
                    w: 100,
                    y: 100
                }; //目标长宽  
                this.step = {
                    x: 10,
                    y: 10
                }; //步长 x:x方向 y:y方向  
                this.alpha = {
                    s: 10,
                    e: 90,
                    t: 10
                }; //透明度,s初始,e结束,t步长  
            }

            function JAni() {
                var self = this;
                var aniObjs = {};

                var getCurrentStyleProperty = function(pObj, pProperty) {
                    try {
                        if(pObj.currentStyle)
                            return eval("pObj.currentStyle." + pProperty);
                        else
                            return document.defaultView.getComputedStyle(pObj, "").getPropertyValue(pProperty);
                    } catch(e) {
                        alert(e);
                    }
                }

                this.popup = function(pDiv, pOrgSize, pTargetSize, pStep, pAlpha) {

                    var aniObj = new JAniObj();
                    aniObjs[pDiv] = aniObj;

                    with(aniObj) {
                        obj = $(pDiv);
                        orgPos = IPos.getAbsPos(obj);
                        orgSize = pOrgSize;
                        targetSize = pTargetSize;
                        step = pStep;
                        alpha = pAlpha;

                        with(obj.style) {
                            overflow = "hidden";
                            position = "absolute";
                            width = pOrgSize.w + "px";
                            height = pOrgSize.h + "px";
                            left = orgPos.x + "px";
                            top = orgPos.y + "px";
                            if(document.all) {
                                filter = "Alpha(opacity=" + pAlpha.s + ")";
                            } else
                                opacity = pAlpha.s / 100;
                        }
                    }

                    aniObj.interval = setInterval("popup_('" + pDiv + "')", 10);
                }

                popup_ = function(pDivId) {

                    pObj = aniObjs[pDivId];

                    var w = parseInt(pObj.obj.style.width);
                    var h = parseInt(pObj.obj.style.height);

                    if(w >= Math.abs(pObj.targetSize.w) && h >= Math.abs(pObj.targetSize.h)) {
                        clearInterval(pObj.interval);
                        if(document.all)
                            pObj.obj.style.filter = "Alpha(opacity=" + pObj.alpha.e + ")";
                        else
                            pObj.obj.style.opacity = pObj.alpha.e / 100;

                        delete aniObjs[pObj.obj.id];
                    } else {
                        if(w < Math.abs(pObj.targetSize.w))
                            w += pObj.step.x;

                        if(h < Math.abs(pObj.targetSize.h))
                            h += pObj.step.y;

                        if(document.all) {
                            var pattern = /opacity=(\d{1,3})/;
                            var result = pattern.exec(pObj.obj.style.filter);
                            if(result != null) {
                                if(result[1] < pObj.alpha.e)
                                    pObj.obj.style.filter = "Alpha(opacity=" + (result[1] + pObj.alpha.t) + ")"
                                else
                                    pObj.obj.style.filter = "Alpha(opacity=" + pObj.alpha.e + ")";
                            }
                        } else {
                            if(pObj.obj.style.opacity < pObj.alpha.e / 100) {
                                pObj.obj.style.opacity = parseFloat(pObj.obj.style.opacity) + pObj.alpha.t / 100;
                            } else
                                pObj.obj.style.opacity = pObj.alpha.e / 100;
                        }
                    }

                    pObj.obj.style.width = w + "px";
                    pObj.obj.style.height = h + "px";

                    if(pObj.targetSize.w < 0) {
                        var vLeft = parseInt(getCurrentStyleProperty(pObj.obj, "left"));
                        vLeft = isNaN(vLeft) ? 0 : vLeft;
                        pObj.obj.style.left = vLeft - pObj.step.x + "px";
                    }

                    if(pObj.targetSize.h < 0) {
                        var vTop = parseInt(getCurrentStyleProperty(pObj.obj, "top"));
                        vTop = isNaN(vTop) ? 0 : vTop;
                        pObj.obj.style.top = vTop - pObj.step.y + "px";
                    }
                }
            }

            var ani = new JAni();
            ani.popup(
                "apDiv1", {
                    w: 50,
                    h: 50
                }, //初始长宽  
                {
                    w: 200,
                    h: 200
                }, //目标长宽  
                {
                    x: 8,
                    y: 8
                }, //步长  
                {
                    s: 10,
                    e: 80,
                    t: 10
                } //透明度 起始,结束,步长  
            );

            ani.popup(
                "apDiv2", {
                    w: 50,
                    h: 50
                }, //初始长宽  
                {
                    w: -200,
                    h: 200
                }, //目标长宽  
                {
                    x: 8,
                    y: 8
                }, //步长  
                {
                    s: 10,
                    e: 40,
                    t: 2
                } //透明度 起始,结束,步长  
            );

            ani.popup(
                "apDiv3", {
                    w: 50,
                    h: 50
                }, //初始长宽  
                {
                    w: -200,
                    h: -200
                }, //目标长宽  
                {
                    x: 8,
                    y: 8
                }, //步长  
                {
                    s: 10,
                    e: 40,
                    t: 10
                } //透明度 起始,结束,步长  
            );

            ani.popup(
                "apDiv4", {
                    w: 50,
                    h: 50
                }, //初始长宽  
                {
                    w: 200,
                    h: -200
                }, //目标长宽  
                {
                    x: 8,
                    y: 8
                }, //步长  
                {
                    s: 10,
                    e: 50,
                    t: 10
                } //透明度 起始,结束,步长  
            );
        </script>
    </body>

</html>

发表评论

您的电子邮箱地址不会被公开。