求大师,我做的是轮播图抖动的厉害,求解 ,代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>js实现3D图片逐张轮播幻灯片</title>
<style type="text/css">
*{margin:0;padding:0;list-style-type:none;}
a,img{border:0;}
body{font:14px "微软雅黑";}
/* focus_Box */
#focus_Box{position:relative;width:1024px;height:100px;margin:20px auto;}
#focus_Box ul{position:relative;width:1024px;height:100px}
#focus_Box li{z-index:0;position:absolute; width:0px;height:0px;top:146px;cursor:pointer;left:377px;border-radius:4px;box-shadow:1px 1px 12px rgba(200, 200, 200, 1)}
#focus_Box li img{width:100%;height:100%;vertical-align:top}
#focus_Box li p{position:absolute;left:0;bottom:0px;width:100%;height:40px;line-height:40px;background:url(images/float-bg.png) repeat; text-align:center;color:#fff;}
#focus_Box li p span{display:inline-block;height:40px;overflow:hidden;}
#focus_Box .prev,#focus_Box .next{display:block;z-index:100;overflow:hidden;cursor:pointer;position:absolute;width:52px;height:52px;top:55px;}
#focus_Box .prev{background:url(images/btn.png) left bottom no-repeat;left:0px}
#focus_Box .next{background:url(images/btn.png) right bottom no-repeat;right:0px} 
#focus_Box .prev:hover{background-position:left top;}
#focus_Box .next:hover{background-position:right top;}
</style>
<script type="text/javascript">
// JavaScript Document
function ZoomPic ()
{
    this.initialize.apply(this, arguments)    
}
ZoomPic.prototype = 
{
    initialize : function (id)
    {
        var _this = this;
        this.wrap = typeof id === "string" ? document.getElementById(id) : id;
        this.oUl = this.wrap.getElementsByTagName("ul")[0];
        this.aLi = this.wrap.getElementsByTagName("li");
        this.prev = this.wrap.getElementsByTagName("span")[0];
        this.next = this.wrap.getElementsByTagName("span")[1];
        this.timer = 1000;
        this.aSort = [];
        this.iCenter = 2;
        this._doPrev = function () {return _this.doPrev.apply(_this)};
        this._doNext = function () {return _this.doNext.apply(_this)};
        this.options = [
            {width:341, height:100, top:40, left:0, zIndex:1},
            {width:410, height:120, top:30, left:130, zIndex:2},
            {width:512, height:150, top:10, left:260, zIndex:3},
            {width:410, height:120, top:30, left:490, zIndex:2},
            {width:341, height:100, top:40, left:681, zIndex:1},
        ];
        for (var i = 0; i < this.aLi.length; i++) this.aSort[i] = this.aLi[i];
        this.aSort.unshift(this.aSort.pop());
        this.setUp();
        this.addEvent(this.prev, "click", this._doPrev);
        this.addEvent(this.next, "click", this._doNext);
        this.doImgClick();    
        this.timer = setInterval(function ()
        {
            _this.doNext()    
        }, 3000);        
        this.wrap.onmouseover = function ()
        {
            clearInterval(_this.timer)    
        };
        this.wrap.onmouseout = function ()
        {
            _this.timer = setInterval(function ()
            {
                _this.doNext()    
            }, 3000);    
        }
    },
    doPrev : function ()
    {
        this.aSort.unshift(this.aSort.pop());
        this.setUp()
    },
    doNext : function ()
    {
        this.aSort.push(this.aSort.shift());
        this.setUp()
    },
    doImgClick : function ()
    {
        var _this = this;
        for (var i = 0; i < this.aSort.length; i++)
        {
            this.aSort[i].onmouseover = function ()
            {
                if (this.index > _this.iCenter)
                {
                    for (var i = 0; i < this.index - _this.iCenter; i++) _this.aSort.push(_this.aSort.shift());
                    _this.setUp()
                }
                else if(this.index < _this.iCenter)
                {
                    for (var i = 0; i < _this.iCenter - this.index; i++) _this.aSort.unshift(_this.aSort.pop());
                    _this.setUp()
                }
            }
        }
    },
    setUp : function ()
    {
        var _this = this;
        var i = 0;
        for (i = 0; i < this.aSort.length; i++) this.oUl.appendChild(this.aSort[i]);
        for (i = 0; i < this.aSort.length; i++)
        {
            this.aSort[i].index = i;
            if (i < 5)
            {
                this.css(this.aSort[i], "display", "block");
                this.doMove(this.aSort[i], this.options[i], function ()
                {
                    _this.doMove(_this.aSort[_this.iCenter].getElementsByTagName("img")[0], {opacity:100}, function ()
                    {
                        _this.doMove(_this.aSort[_this.iCenter].getElementsByTagName("img")[0], {opacity:100}, function ()
                        {
                            _this.aSort[_this.iCenter].onmouseout = function ()
                            {
                                _this.doMove(this.getElementsByTagName("div")[0], {bottom:-100})
                            }
                        })
                    })
                });
            }
            else
            {
                this.css(this.aSort[i], "display", "none");
                this.css(this.aSort[i], "width", 0);
                this.css(this.aSort[i], "height", 0);
                this.css(this.aSort[i], "top", 37);
                this.css(this.aSort[i], "left", this.oUl.offsetWidth / 2)
            }
            if (i < this.iCenter || i > this.iCenter)
            {
                this.css(this.aSort[i].getElementsByTagName("img")[0], "opacity", 100)
                this.aSort[i].onmouseout = function ()
                {
                    _this.doMove(this.getElementsByTagName("img")[0], {opacity:100})
                };
                this.aSort[i].onmouseout();
            }
            }        
    },
    addEvent : function (oElement, sEventType, fnHandler)
    {
        return oElement.addEventListener ? oElement.addEventListener(sEventType, fnHandler, false) : oElement.attachEvent("on" + sEventType, fnHandler)
    },
    css : function (oElement, attr, value)
    {
        if (arguments.length == 2)
        {
            return oElement.currentStyle ? oElement.currentStyle[attr] : getComputedStyle(oElement, null)[attr]
        }
        else if (arguments.length == 3)
        {
            switch (attr)
            {
                case "width":
                case "height":
                case "top":
                case "left":
                case "bottom":
                    oElement.style[attr] = value + "px";
                    break;
                case "opacity" :
                    oElement.style.filter = "alpha(opacity=" + value + ")";
                    oElement.style.opacity = value / 100;
                    break;
                default :
                    oElement.style[attr] = value;
                    break
            }    
        }
    },
    doMove : function (oElement, oAttr, fnCallBack)
    {
        var _this = this;
        clearInterval(oElement.timer);
        oElement.timer = setInterval(function ()
        {
            var bStop = true;
            for (var property in oAttr)
            {
                var iCur = parseFloat(_this.css(oElement, property));
                property == "opacity" && (iCur = parseInt(iCur.toFixed(2) * 100));
                var iSpeed = (oAttr[property] - iCur) / 5;
                iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
                
                if (iCur != oAttr[property])
                {
                    bStop = false;
                    _this.css(oElement, property, iCur + iSpeed)
                }
            }
            if (bStop)
            {
                clearInterval(oElement.timer);
                fnCallBack && fnCallBack.apply(_this, arguments)    
            }
        }, 30)
    }
    };
window.onload = function ()
{
    new ZoomPic("focus_Box");
};
</script>
</head>
<body>
<div id="focus_Box">
    <span class="prev">&nbsp;</span>
    <span class="next">&nbsp;</span>
    <ul>
        <li>
            <a href="http://gansu.gansudaily.com.cn/system/2016/04/29/016032781.shtml"><img alt="首届丝绸之路(敦煌)国际文化博览会" src="images/1.png.png" width="341" height="100" /></a>
            <p>
                <span>首届丝绸之路(敦煌)国际文化博览会</span>
            </p>
        </li>
        <li>
            <a href="http://edu.gansudaily.com.cn/system/2016/04/11/015996091.shtml"><img alt="关注2016年甘肃高考" src="images/5.png.png"  width="341" height="100"/></a>
            <p>
                <span>关注2016年甘肃高考</span>
            </p>
        </li>
        <li>
            <a href="http://topic.gansudaily.com.cn/system/2016/04/30/016035063.shtml"><img alt="聚集甘肃农村天价彩礼" src="images/2.png.png"  width="341" height="100"/></a>
            <p>
                <span>聚集甘肃农村天价彩礼</span>
            </p>
        </li>
        <li>
            <a href="http://gansu.gansudaily.com.cn/system/2016/07/06/016207491.shtml"><img alt="2016中国西部创客节" src="images/zhutu2.png"  width="341" height="100"/></a>
            <p>
                <span>做时代的弄潮儿——2016中国西部创客节</span>
            </p>
        </li>
        <li>
            <a href="http://gansu.gansudaily.com.cn/system/2016/06/15/016148108.shtml"><img width="341" height="100" alt="2016甘肃省项目观摩活动专题" src="images/zhutu3.png" /></a>
            <p>
                <span>2016甘肃省项目观摩活动专题</span>
            </p>
        </li>
    </ul>
</div>
</body>
</html>
阅读 3.7k
2 个回答

我只能说你这个是旋转木马!!!而且我并没有看见抖动。。。 但是在这里建议加个节流阀会好一点

新手上路,请多包涵

二狗来了,简单粗暴,就不讲为啥了,上代码
css: function(oElement, attr, value) {

    if(arguments.length == 2) {
        return oElement.currentStyle ? oElement.currentStyle[attr] : getComputedStyle(oElement, null)[attr]
    } else if(arguments.length == 3) {
        switch(attr) {
            case "width":
            case "height":
            case "top":
            case "left":
            case "bottom":
                oElement.style[attr] = Math.ceil(value) + "px";
                break;
            default:
                oElement.style[attr] = Math.ceil(value);
                break
        }
    }
},

在css这个方法中,将value的值向上取整,这样图片才能勉强维持不抖动这样子~~(上面是二狗自己的代码)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题