轮播图

轮播图之根据小圆点移动图片

<script>
    //用户:当鼠标移入1,2,3按钮,图片改变

    //1. 获取元素
    // 获取box
    var box = my$('box');
    // 获取相框
    var inner = box.children[0];
    // 获取相框的宽度
    var imgWidth = inner.offsetWidth;
    // 获取ul
    var ulObj = inner.getElementsByTagName('ul')[0];
    // 获取所有的span
    var spanObjs = inner.getElementsByClassName('square')[0].getElementsByTagName('span');

    //2. 遍历所有的span标签,为每一个span标签添加鼠标移入事件
    for (var i = 0; i < spanObjs.length; i++) {
        //2.2 为每一个span添加自定义属性,span的索引
        spanObjs[i].setAttribute('index', i);
        //2.1 为span注册鼠标移入事件
        spanObjs[i].onmouseover = function () {
            //2.3 获取索引
            var hh = this.getAttribute('index');
            //2.4 移动ul
            animate(ulObj, -hh * imgWidth);

            //2.5 完成span按钮的排他效果
            // 排他两件事: 所有样式还原,当前设置样式--添加class=‘current’
            for (var j = 0; j < spanObjs.length; j++) {
                spanObjs[j].removeAttribute('class');
            }

            this.className = 'current';

        }
    }

    //为任意的元素,移动到任意的位置
    function animate(element, target) {
        clearInterval(element.timeId);
        element.timeId = setInterval(function () {
            //1. 获取div的当前位置
            var current = element.offsetLeft;
            // 2. 设置一步走多少像素
            var step = 9;
            //2.2 判断step为正直还是负值
            step = current > target ? -step : step;
            //3. 走完了一步,当前位置改变
            current += step;
            //5. 达到目标,清除定时器
            if (Math.abs(target - current) < Math.abs(step)) {
                clearInterval(element.timeId);
                //4. 设置当前位置
                element.style.left = target + 'px';
            } else {
                //4. 设置当前位置
                element.style.left = current + 'px';
            }
        }, 20);
    }
</script>

 无缝轮播图

<script>
    //1. 获取元素
    // 获取相框
    var screen = my$('screen');
    // 获取相框的宽度
    var imgWidth = screen.offsetWidth;
    // 获取ul
    var ulObj = screen.getElementsByTagName('ul')[0];
    // 获取所有的li
    var list = ulObj.getElementsByTagName('li');

    //2.1 获取ul的位置
    var current = ulObj.offsetLeft;

    //2. 定时器,移动ul
    ulObj.timeId = setInterval(f1, 100);

    function f1() {
        //2.2 每隔20毫秒移动10像素
        current -= 10;

        //2.4 如果是最后一个li,那么就不再向左移动,而是瞬间定位到第一个li,完成无缝的效果
        if (current < -imgWidth * (list.length - 1)) {
            current = 0;
        }

        //2.3 给ul 重新设置位置
        ulObj.style.left = current + 'px';
    }

    //3. 当鼠标移入相框,清除定时器
    screen.onmouseover = function () {
        clearInterval(ulObj.timeId);
    }
    //4. 当鼠标移出相框,重新开启定时器
    screen.onmouseout = function () {
        ulObj.timeId = setInterval(f1, 100);
    }


</script>

左右焦点轮播图

<script>

    //1. 获取元素
    // 获取box
    var box = my$('box');
    // 获取相框
    var ad = box.getElementsByClassName('ad')[0];
    // 获取相框的宽度
    var imgWidth = ad.offsetWidth;
    // 获取左右焦点按钮的盒子
    var focusD = my$('focusD');
    // 获取ul
    var ulObj = my$('imgs');
    // 获取所有的li
    var list = ulObj.children;

    // 2. 当鼠标 移入 box  显示包着左右焦点的盒子
    box.onmouseover = function () {
        focusD.style.display = 'block';
    }
    box.onmouseout = function () {
        focusD.style.display = 'none';
    }

    //定义全局变量,用于存储移动的索引
    var index = 0;
    //点击右边按钮,移动ul
    my$('right').onclick = function () {
        // console.log(index);
        //当显示最后一个li时,不在移动ul 最后一个li的索引:list.length-1
        if (index < list.length - 1) {
            index++;
            animate(ulObj, -index * imgWidth);
        }
        // console.log(index + '======');
    }

    //点击左边按钮,移动ul
    my$('left').onclick = function () {
        //当显示第一张图片时,不在移动ul
        if (index > 0) {
            index--;
            animate(ulObj, -index * imgWidth);
        }
    }


    /**
     * 为任意的元素,移动到任意的位置
     * @param element 要移动的元素
     * @param target 元素的目标位置 是数字类型,不带px单位
     */
    function animate(element, target) {
        clearInterval(element.timeId);
        element.timeId = setInterval(function () {
            //1. 获取div的当前位置
            var current = element.offsetLeft;
            // 2. 设置一步走多少像素
            var step = 9;
            //2.2 判断step为正直还是负值
            step = current > target ? -step : step;
            //3. 走完了一步,当前位置改变
            current += step;
            //5. 达到目标,清除定时器
            if (Math.abs(target - current) < Math.abs(step)) {
                clearInterval(element.timeId);
                //4. 设置当前位置
                element.style.left = target + 'px';
            } else {
                //4. 设置当前位置
                element.style.left = current + 'px';
            }
        }, 20);
    }

</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值