jquery动画问题

【问题描述】:这是一个四张图片向左循环滚动动画,图片的尺寸是:width:400px; height:300px;
【问题1】:
为了实现图片播放到最后一张之后,自动再从第一张播放:
Math.abs($pos.left) >= 400 ,请问,为什么这里是>= 400 。四张图片不应该是1600吗?每张图片循环结束的时候都会产生一个400px的数值,这样不是每次都向ul的尾部添加一张图片吗?

【问题2】:
$('#one ul').append($('#one ul>li:first'));上述语句把第一张图片添加到ul的尾部,请问这样岂不是每次触发该if循环的时候都添加了第一张图片,这样不是加进去了很多第一张图片吗?如果每次都添加进去第一张图片,这不是让这个循环里面的图片越来越多了吗?谢谢

【问题3】
$('#one ul').css('left','0px');为什么要把偏移量设置为0px?
谢谢

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8" />
    <title>jquery</title>
    <script src="jquery-1.7.2.js"></script>
    <style>
        *{
            margin:0px;
            padding:0px;
            list-style:none;
        }

        #one{
            width:400px;
            height:300px;
            border:1px solid #f00;
            position:relative;
            overflow:hidden;
        }

        #one ul{
            position:absolute;
            left:0;
            top:0;
            width:1600px;
        }

        #one li{
            float:left;
        }
    </style>
    <script>
        $(function(){

            //使用定时器来完成自动滚动功能
            setInterval(function(){
                var $pos = $('#one ul').position();

                //设置ul的位置
                var $left = $pos.left-1 + 'px';
                var $top = $pos.top + 'px';

                $('#one ul').css({left:$left,top:$top});

                //判断移动位置是否超过了单个图片的移动距离
                if(Math.abs($pos.left) >= 400){
                    //将图片移动到ul最后
                    $('#one ul').append($('#one ul>li:first'));
                    $('#one ul').css('left','0px');

                }

            },10)
        })
    </script>
</head>
    <body>
![图片描述][1]
    </body>
</html>
阅读 3.1k
1 个回答

后来发现这样写好像也能实现:(把触发if循环的条件变了一下,然后删掉后一句append),只是原问题还请再解答一下。谢谢

    $(function(){
        var xh = setInterval(function(){
            var $pos = $('#one ul').position();
            var $left = $pos.left-1 + 'px';
            var $top = $pos.top + 'px';
            $('#one ul').css({left:$left,top:$top});
            console.log($pos);

            if(Math.abs($pos.left)>=1200){
                $('#one ul').css('left','0px');
            }

        },10)

        $('button').click(function(){
            clearInterval(xh);
        })

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