js无缝滚动

在做无缝滚动的动画前,我们先来了解两个属性:offsetwidth、offsetleft

  • offsetwidth 该属性的值只与该元素有关, 与周围的元素(父级与子级元素无关。)

offsetwidth = slef.width + slef.padding*2 + slef.border*2 (注:与自身的margin无关

  • offsetleft该属性与父级元素有关,也与自身的marginLeft有关

offsetLeft= pardent.marginLeft +pardent.borderWidth+ pardent.paddingWidth + self.marginLeft;

代码示例:

    <style type="text/css">
     body {
            border:20px solid yellow;
            margin:20px;
            padding:40px;
            background:#d1d1d1;
        }
        #test {
            width:400px;
            height:200px;
            padding:20px;
            background:blue;
            border:5px solid red;
        }
    </style>
</head>
<body>
<div id="test"></div>
    <script>
        var test = document.getElementById("test");
        test.innerHTML = "<p>offsetWidth:" + test.offsetWidth + "</p>" +
                        "<p>offsetHeight:"+test.offsetHeight+"</p>"+
                        "<p>offsetLeft:"+test.offsetLeft+"</p>"+
                        "<p>offsetTop:"+test.offsetTop+"</p>";
    </script>
</body>

代码结果展示:

这里写图片描述

js无缝滚动代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{margin: 0px;padding: 0px}
        #sliderWrap{overflow:hidden;width: 900px;position: relative;height: 300px;box-sizing:border-box;background: red;margin: 50px auto}
        #sliderWrap ul{position: absolute;left: 0;box-sizing:border-box;}
        #sliderWrap ul li{float: left;list-style: none;width: 450px;height: 300px;border: 1px solid #fff;box-sizing: border-box}
    </style>
</head>
<body>
<div id="sliderWrap">
    <ul>
        <li><img src="img/1.jpg"></li>
        <li><img src="img/2.jpg"></li>
    </ul>
    <script>
        window.onload = function () {
            var oSlider = document.getElementById('sliderWrap');
            var oUl = oSlider.getElementsByTagName('ul')[0];
            var aLi = oUl.getElementsByTagName('li');
            //把轮播图内容复制一份
            oUl.innerHTML = oUl.innerHTML+oUl.innerHTML;
            //设置ul的长度为li的总长度,便于移动
            oUl.style.width = aLi[0].offsetWidth*aLi.length+'px';
            var timer;
            var moveLeft = function () {
                timer = setInterval(function () {
                    //每隔30毫秒向左移动2px
                    oUl.style.left = oUl.offsetLeft - 2 +'px';
                    if(oUl.offsetLeft < -(oUl.offsetWidth/2)){
                        //当向左移动一半时瞬速将位移设置为0
                        oUl.style.left =0+'px'
                    }
                },30)
            }
            for(var i=0;i<aLi.length;i++){
                /**
                 * 鼠标移入暂停滚动
                 */
                aLi[i].onmouseover = function () {
                    clearInterval(timer);
                }
                /**
                 * 鼠标移出继续滚动
                 */
                aLi[i].onmouseout = function () {
                    moveLeft();
                }
            }
        }
    </script>
</div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值