javascript - 轮播图不执行

查看:112
本文介绍了javascript - 轮播图不执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

尝试写了一个轮播图,可是一直都不执行,但是也没报错

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery1.42.min.js"></script>
    <style>
        .wrap{
            position: relative;
            width:580px;
            height:290px;
            overflow: hidden;
        }
        .wrap ul{
            position: absolute;
            top: 0px;
        }
        .wrap ul li{
            list-style: none;
            width:540px;
            height:290px;
        }
        .wrap ul li img{
            width:100%;
        }
        .clearfix:after{
            content: "";
            display: block;
            clear: both;
            visibility: hidden;
            overflow: hidden;
        }
    </style>
</head>
<body>
<div class="wrap">
    <ul class="clearfix">
        <li>
            <img src="img/pic2.jpg" alt="">
        </li>
        <li>
            <img src="img/pic3.jpg" alt="">
        </li>
        <li>
            <img src="img/pic4.jpg" alt="">
        </li>
        <li>
            <img src="img/pic5.jpg" alt="">
        </li>
    </ul>
    <script>
        $(function () {
            setInterval(slide(),100);

            var $li = $('ul li').length;
//            console.log($li);
            var $top = parseInt($('ul').css('top'));
//            console.log($top);
            var $height = $('ul li').height();
//            console.log($height);
            function slide() {
//                console.log($top < (-($li-1)*$height));
                if($top < (-($li-1)*$height)){
                    $('ul').css('top','0px');
                    console.log(2);
                }else{
                    console.log(1);
                    $('ul').css({
                        'top':($top-$height)+'px'
                    });
                }
            }

        })
    </script>

</div>
</body>
</html>

因为li没有浮动,我就试试这个想法可不可行,所有用的是top值。console能显示出来1,说明判断那一块执行了,但是图片完全没反应,求问原因??

感谢@抓不住的月光,我把代码改了一点,为了对比我贴在下边了

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery1.42.min.js"></script>
    <style>
        .wrap {
            position: relative;
            width: 580px;
            height: 290px;
            overflow: hidden;
        }

        .wrap ul {
            position: absolute;
            top: 0px;
            -webkit-transition: all .5s;
            -moz-transition: all .5s;
            -ms-transition: all .5s;
            -o-transition: all .5s;
            transition: all .5s;
        }

        .wrap ul li {
            list-style: none;
            width: 540px;
            height: 290px;
        }

        .wrap ul li img {
            width: 100%;
        }

        .clearfix:after {
            content: "";
            display: block;
            clear: both;
            visibility: hidden;
            overflow: hidden;
        }
    </style>
</head>
<body>
<div class="wrap">
    <ul class="clearfix">
        <li>
            <img src="img/pic2.jpg" alt="">
        </li>
        <li>
            <img src="img/pic3.jpg" alt="">
        </li>
        <li>
            <img src="img/pic4.jpg" alt="">
        </li>
        <li>
            <img src="img/pic5.jpg" alt="">
        </li>
    </ul>
    <script>

        window.onload = function () {
            //获取li的个数
            var $li = $('ul li').length;
            //获取当前ul的top值
            var $top = parseInt($('ul').css('top'));
            //获取每个li的高度
            var $height = $('ul li').height();
            var index = -1;
            slide = function () {
                index++;
                if (index >= $li) {//移动到最后一张
                    index = -1;
                } else {//没有移动到最后一张
                    var slideUl = $('ul')[0];
                    slideUl.style.top = (-index * $height)+'px';
//                    $('ul').css(top, -(index * $height) + 'px');
                    console.log(slideUl.style.top );
                }

            };
            setInterval(slide, 1000);
        }

    </script>

</div>
</body>
</html>

做了几个改动:

  1. 增加了动画的过渡效果

  2. 如果index的初始值定位0,在一次循环以后,第一张图片将会无法显示,直接会从第二章开始,因此我把index的值设置为了-1.

  3. 不再使用jquery的方法设置top值,因为用jq的方法不知为何一直不运行,所以我就换了。

解决方案

首先,你的setInterval写错了。

你要么这样写:

            setInterval(function() {
                slide();
            }, 100);

要么这样写:

setInterval(slide, 100);

至于你的那种写法- -首先漏了引号

setInterval("slide()", 100);

其次,window对象的setInterval要求传递的方法参数必须是【全局作用域】的
函数定义function slide(){...}这是【局部作用域】的函数,需改成:

slide=function(){...}//注意前面不能加var

所以这种【不建议】使用


最后你的slide函数里的$height不会更新,你这个轮播只会动一次就废了。。

再给你个例子吧https://jsfiddle.net/o5oqsodg/(这个例子还实现了无缝滚动和鼠标经过暂停功能,看懂了基本就都明白了)

这篇关于javascript - 轮播图不执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆