js实现列表自动滚动循环播放

yizhihongxing

实现列表自动滚动循环播放,可以通过JS的定时器+无缝滚动来实现。

以下是步骤:

1、创建HTML结构

首先我们要有一个HTML结构来存放我们要用JS来动态生成的滚动列表,例如:

<ul id="scrollList">
    <li>第1行内容</li>
    <li>第2行内容</li>
    <li>第3行内容</li>
    <li>第4行内容</li>
    <li>第5行内容</li>
    ...
</ul>

2、CSS样式

我们需要对滚动列表的样式进行设置,例如:

#scrollList {
    overflow: hidden; /* 隐藏溢出部分 */
    position: relative; /* 设置相对位置 */
}

#scrollList li {
    list-style: none; /* 取消列表默认样式 */
    line-height: 30px; /* 行高 */
    position: absolute; /* 设置绝对位置 */
}

3、JS实现

接下来我们就需要用JS来实现无缝滚动了。我们可以通过定时器来控制滚动,同时需要用JS动态生成复制的列表项,实现无缝滚动的效果。

3.1、动态生成复制的列表项

我们需要复制出一个和原来列表项完全一样的列表,然后将它添加到滚动列表的末尾,这个操作需要在JS中完成。例如:

var scrollList = document.getElementById('scrollList'); //获取滚动列表
var scrollItems = scrollList.getElementsByTagName('li'); //获取所有列表项
var len = scrollItems.length; //获取列表项个数

//复制原来的列表项
var cloneItems = [];
for(var i = 0; i < len; i++) {
    cloneItems[i] = scrollItems[i].cloneNode(true);
}
//将复制的列表添加到滚动列表的末尾
for(var i = 0; i < len; i++) {
    scrollList.appendChild(cloneItems[i]);
}

3.2、控制滚动

我们需要通过定时器,来控制滚动列表的滚动。例如:

var speed = 30; //滚动速度,数值越小速度越快
var scrollTimer; //定时器变量

function startScroll() {
    //启动定时器,每隔speed毫秒执行一次scrollList函数
    scrollTimer = setInterval(scrollList, speed);
}

function scrollList() {
    if(scrollList.scrollTop % 30 == 0) {
        clearInterval(scrollTimer); //如果滚动到了一个完整的列表项,则停止定时器
        setTimeout(startScroll, 3000); //停顿3秒,再次启动定时器
    } else {
        scrollList.scrollTop += 1; //滚动列表,每隔1像素滚动一次
        if(scrollList.scrollTop >= scrollList.scrollHeight / 2) {
            scrollList.scrollTop = 0; //如果滚动到了复制的列表项的一半,则将滚动位置重置为0
        }
    }
}

在上面的代码中,我们创建了一个定时器scrollTimer,并且通过setInterval函数来启动。在定时器中,我们通过scrollList函数来控制滚动列表的滚动。我们每隔1像素滚动一次,并且判断是否滚动到了一个完整的列表项,如果是则停止定时器,并且经过3秒的停顿之后再次启动。同时,如果滚动到了复制的列表项的一半,则需要将滚动位置重置为0。

4、示例说明

下面我们通过两个示例来进一步说明实现列表自动滚动循环播放的方式。

示例一

本示例通过手动添加多个列表项,然后实现滚动列表的自动滚动。页面代码如下:

<div>
    <button onclick="startScroll()">开始滚动</button>
    <button onclick="stopScroll()">停止滚动</button>
</div>
<ul id="scrollList">
    <li>第1行内容</li>
    <li>第2行内容</li>
    <li>第3行内容</li>
    <li>第4行内容</li>
    <li>第5行内容</li>
    <li>第6行内容</li>
    <li>第7行内容</li>
</ul>
<script>
//动态生成复制的列表项
var scrollList = document.getElementById('scrollList');//获取滚动列表
var scrollItems = scrollList.getElementsByTagName('li');//获取所有列表项
var len = scrollItems.length;//获取列表项个数

//复制原来的列表项
var cloneItems = [];
for(var i = 0; i < len; i++) {
    cloneItems[i] = scrollItems[i].cloneNode(true);
}
//将复制的列表添加到滚动列表的末尾
for(var i = 0; i < len; i++) {
    scrollList.appendChild(cloneItems[i]);
}

var speed = 30; //滚动速度,数值越小速度越快
var scrollTimer; //定时器变量

function startScroll() {
    //启动定时器,每隔speed毫秒执行一次scrollList函数
    scrollTimer = setInterval(scrollListFunc, speed);
}

function scrollListFunc() {
    if(scrollList.scrollTop % 30 == 0) {
        clearInterval(scrollTimer); //如果滚动到了一个完整的列表项,则停止定时器
        setTimeout(startScroll, 3000); //停顿3秒,再次启动定时器
    } else {
        scrollList.scrollTop += 1; //滚动列表,每隔1像素滚动一次
        if(scrollList.scrollTop >= scrollList.scrollHeight / 2) {
            scrollList.scrollTop = 0; //如果滚动到了复制的列表项的一半,则将滚动位置重置为0
        }
    }
}

function stopScroll() {
    clearInterval(scrollTimer); //停止定时器
}
</script>

在上面的示例中,我们通过手动添加多个列表项,然后用JS动态生成复制的列表,并且实现了滚动列表的自动滚动。按钮分别用来开始和停止滚动。

示例二

本示例通过AJAX异步请求数据,得到数据后用JS动态生成滚动列表,并且实现了无缝滚动。页面代码如下:

<div>
    <button onclick="startScroll()">开始滚动</button>
    <button onclick="stopScroll()">停止滚动</button>
</div>
<ul id="scrollList"></ul>
<script>
    //通过AJAX异步请求数据,并且用JS动态生成滚动列表
    function loadData() {
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if(xhr.readyState == 4 && xhr.status == 200) {
                var data = JSON.parse(xhr.responseText);
                var scrollList = document.getElementById('scrollList');
                var len = data.length;
                for(var i = 0; i < len; i++) {
                    var li = document.createElement('li');
                    li.innerHTML = data[i].title;
                    scrollList.appendChild(li);
                }
                //复制原来的列表项
                var cloneItems = [];
                for(var i = 0; i < len; i++) {
                    cloneItems[i] = scrollList.getElementsByTagName('li')[i].cloneNode(true);
                }
               //将复制的列表添加到滚动列表的末尾
               for(var i = 0; i < len; i++) {
                    scrollList.appendChild(cloneItems[i]);
               }
               startScroll();//开始无缝滚动
            }
        }
        xhr.open('GET', 'data.json', true);
        xhr.send();
    }

    var speed = 30; //滚动速度,数值越小速度越快
    var scrollTimer; //定时器变量
    var scrollList = document.getElementById('scrollList');//获取滚动列表

    function startScroll() {
        //启动定时器,每隔speed毫秒执行一次scrollListFunc函数
        scrollTimer = setInterval(scrollListFunc, speed);
    }

    function scrollListFunc() {
        if(scrollList.scrollTop % 30 == 0) {
            clearInterval(scrollTimer); //如果滚动到了一个完整的列表项,则停止定时器
            setTimeout(startScroll, 3000); //停顿3秒,再次启动定时器
        } else {
            scrollList.scrollTop += 1; //滚动列表,每隔1像素滚动一次
            if(scrollList.scrollTop >= scrollList.scrollHeight / 2) {
                scrollList.scrollTop = 0; //如果滚动到了复制的列表项的一半,则将滚动位置重置为0
            }
        }
    }

    function stopScroll() {
        clearInterval(scrollTimer); //停止定时器
    }

    loadData();//加载数据,并且实现滚动
</script>

在上面的示例中,我们通过AJAX异步请求数据,得到数据后用JS动态生成滚动列表,并且实现了无缝滚动。按钮分别用来开始和停止滚动。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现列表自动滚动循环播放 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • javascript 进阶篇1 正则表达式,cookie管理,userData

    JavaScript 进阶篇1:正则表达式、Cookie 管理、UserData 1. 正则表达式 正则表达式在 JavaScript 开发中非常重要,是处理字符串的得力工具。以下是一些基本概念和正则表达式在 JavaScript 中的应用。 基本概念 匹配模式:正则表达式在搜索时所用的模式 字符串搜索:在文本中搜索匹配模式并返回匹配结果 模式修饰符:使用标…

    JavaScript 2023年6月11日
    00
  • JavaScript中检测数据类型的四种方法总结

    当我们书写JavaScript程序时,时常需要对不同的变量进行类型的检测。因为JavaScript中的变量是弱类型的,而且变量的类型也随时可以改变,所以正确地进行类型检测是非常重要的。接下来,我们将介绍JavaScript中检测数据类型的四种方法总结。 方法一:使用typeof操作符 JavaScript提供了一个typeof操作符,可以用来检测一个变量的类…

    JavaScript 2023年6月10日
    00
  • JavaScript实战之菜单特效

    首先感谢您对本站所发布的文章感兴趣。针对您的问题,我将结合实例详细讲解菜单特效的实现方法。 核心思路 要实现菜单特效,需要用到JavaScript和CSS技术的组合,利用JavaScript的dom操作来动态操纵菜单项及其下拉项的样式,实现菜单的展开与收起。接下来,我将分步骤来进行详细说明。 第一步:HTML结构 首先,需要一个基本的HTML结构,包含菜单栏…

    JavaScript 2023年6月11日
    00
  • Javascript前端UI框架Kit使用指南之Kitjs简介

    Javascript前端UI框架Kit使用指南之Kitjs简介 什么是Kitjs Kitjs是一个基于Javascript的前端UI框架,它具有轻便、易用、灵活的特性。 Kitjs基于jquery开发,借鉴了bootstrap、semantic等其他流行UI库的风格和思想,提供了更丰富的组件库,包括表格、表单、弹窗、标签页等常用组件。同时,Kitjs也支持自…

    JavaScript 2023年6月11日
    00
  • Javascript图片上传前的本地预览实例

    下面是“Javascript图片上传前的本地预览实例”的完整攻略。 知识储备 在开始我们的实例之前,需要对以下知识进行了解: 用户通过 <input type=”file”> 选择本地图片,设置 onchange 事件来获取图片的文件信息; 利用 FileReader 对文件进行读取,获取读取后的文件对象; 将文件对象转化为图片的 url 地址,…

    JavaScript 2023年6月11日
    00
  • 如何用js判断dom是否有存在某class的值

    判断DOM中是否存在某个class可以使用JavaScript来实现,具体步骤如下: 获取要判断的DOM元素. 调用DOM元素的classList属性来获取该元素的class列表. 遍历该列表,判断是否存在目标class. 根据判断结果进行相应的处理。 下面是一些示例说明: 示例1:判断DOM元素是否存在某个class。 // 获取DOM元素 var ele…

    JavaScript 2023年6月10日
    00
  • JS Attribute属性操作详解

    JS Attribute 属性操作详解 Attribute 属性是 HTML 中的一种重要的属性类型,它们可以包含 HTML 元素的元数据,并且广泛应用于 JavaScript 编程。在这篇文章中,我们将会深入探讨 JavaScript 中的 Attribute 属性操作。我们将全面介绍属性操作的所有方面,包括读取、设置、更新和删除等。 什么是 Attrib…

    JavaScript 2023年6月10日
    00
  • jQuery插件slicebox实现3D动画图片轮播切换特效

    针对“jQuery插件slicebox实现3D动画图片轮播切换特效”的攻略,我们可以按照以下步骤来进行: 一、引入slicebox插件 在实现3D动画图片轮播切换特效前,首先需要引入slicebox插件及其相关资源文件。可以通过在HTML中引入以下内容来实现: <link rel="stylesheet" href="pa…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部