javascript - 我想实现滚动信息效果,自己写半天只达到这种效果,求修改!

查看:92
本文介绍了javascript - 我想实现滚动信息效果,自己写半天只达到这种效果,求修改!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

  1. 有没有类似的demo供参考,每次只显示一条!

  2. 有什么方法可以让第三条显示完成后再继续滑动显示第一条么,而不是直接又到第一条!

css

    *,div,ul,li{
        padding:0;
        margin:0;
    }
    .content{
        position: relative;
        background-color: red;
        height:40px;
        width:300px;
        margin:0 auto;
    }
        ul{
            height:40px;
            /*overflow: hidden;*/
            position: absolute;
            top:0;
        }
        li{
            height:40px;
            line-height: 40px;
            list-style: none;
        }

html

        <div class="content">
        <ul class="list">
            <li>test1</li>
            <li>test2</li>
            <li>test3</li>
        </ul>
        </div>

JS

    <script>

        let i=0;
        function goTop(){                
                    ++i;
                    // console.log(i);
                    if(i==0){
                        $(".list").css("top",0);
                    }
                    if(i<3){
                    $(".list").animate({
                        top:-40*i
                    },1000)
                }
                else{                
                    i=-1;
                }        
            }

                setInterval(goTop,1000);
    </script>

解决方案

**

这就是无限滚动,方法有很多

**
1、楼上提供的是复制li的方法,这种方法适合单向滚动,如果是个幻灯片要往前往后双向,复制的方式不是很方便,而且操作DOM影响性能。
2、我这里提供另一种posiotn定位的方式:
可直接查看https://jsfiddle.net/o5oqsodg/

或者复制代码到自己那查看

<body>
    <div class="content">
        <ul class="list">
            <li>test1</li>
            <li>test2</li>
            <li>test3</li>
            <li>test4</li>
            <li>test5</li>
        </ul>
    </div>
    <style type="text/css">
    * {
        margin: 0;
        padding: 0;
    }

    .content {
        position: relative;
        top: 100px;
        left: 100px;
        height: 30px;
        width: 100px;
        overflow: hidden;
        text-align: center;
        border: 4px solid #f55;
    }

    .content li {
        position: relative;
        list-style-type: none;
        width: 100px;
        height: 30px;
        line-height: 30px;
        background-color: #eee;
    }
    </style>
    <script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
    <script type="text/javascript">
    var ul = $('.list'),
        li = ul.children('li'),
        liHeight = li.height(), //取得单个li高度
        len = li.length;
    //取得li总数,注意li的index是从0开始的,所以len也就相当于最后一个li的index+1
    ul.height(len * liHeight + 'px'); //动态设置ul总高度

    var index = 0; //索引
    var timer; //定时器
    $('.content').on({
        mouseenter: function() {
            clearInterval(timer); //鼠标悬停在信息上时停止滚动
        },
        mouseleave: function() {
            timer = setInterval(play, 1000); //鼠标移开继续滚动
        }
    }).trigger('mouseleave'); //默认的定时器初始启动

    function play() { //滚动动画函数
        index++;
        if (index === len) { // 当滚动到最后一个li+1时
            li.first().css('top', len * liHeight); //把第一个li拉下来放在最后
        }
        ul.animate({
                'marginTop': -index * liHeight + 'px'
            },
            500,
            function() { //回调函数,每次滚动后执行
                if (index === len) { //index为len时(即滚动到了最后被拉下来的li时)
                    index = 0; //index复原
                    ul.css('marginTop', 0); //ul复原
                    li.first().css('top', 0); //第一个li回到原位
                };
            });
    }
    </script>
</body>

这篇关于javascript - 我想实现滚动信息效果,自己写半天只达到这种效果,求修改!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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