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

实现列表自动滚动循环播放,可以通过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日

相关文章

  • php中preg_replace正则替换用法分析【一次替换多个值】

    《PHP中preg_replace正则替换用法分析【一次替换多个值】》是一篇介绍PHP中正则替换的文章,主要介绍preg_replace函数中的一些使用技巧,可以一次替换多个值。 一、preg_replace函数 preg_replace是PHP中用于正则替换的函数。它的语法如下: preg_replace($pattern, $replacement, $…

    JavaScript 2023年6月10日
    00
  • 关于js函数解释(包括内嵌,对象等)

    JS函数是ECMAScript中最重要的语言单位之一,这是一段可重复使用的代码块,它可以在程序中被调用和执行。JS函数可以接受参数以及返回值,允许我们创建可重复使用的代码,提高代码的可维护和可读性。 1. 函数的基本定义 JS函数可以通过function关键字来定义,语法如下: function 函数名(参数列表){ 函数体 return 返回值; } 其中…

    JavaScript 2023年5月27日
    00
  • javaScript 判断字符串是否为数字的简单方法

    判断一个字符串是否为数字,可以使用多种方法,下面是两种常用的方法。 方法一:使用正则表达式 使用正则表达式可以判断一个字符串是否为数字,通过使用 test() 函数匹配字符串,检测该字符串是否符合数字格式。 if (/^[0-9]+$/.test(str)) { console.log(‘该字符串为数字’); } else { console.log(‘该字…

    JavaScript 2023年5月28日
    00
  • Python实现的飞速中文网小说下载脚本

    下面我将详细讲解“Python实现的飞速中文网小说下载脚本”的完整攻略。 1. 需求背景 飞速中文网是一个提供在线阅读小说的网站,但有时我们并不能在网站上稳定地阅读,此时我们可以使用 Python 实现的小说下载脚本,以便获取更加稳定的阅读体验。 2. 实现步骤 Step 1. 安装 Python 为了运行小说下载脚本,我们需要先安装 Python。我们可以…

    JavaScript 2023年5月28日
    00
  • JS实现求5的阶乘示例

    JS实现求5的阶乘可以使用循环和递归两种方式实现。 循环实现 循环实现是指使用for循环遍历每个数字,并利用一个变量来存储乘积的方式来计算阶乘。 function factorial(num) { var result = 1; // 初始化乘积为1 for(var i = 1; i <= num; i++) { // 循环计算乘积 result = …

    JavaScript 2023年5月28日
    00
  • 一个JavaScript递归实现反转数组字符串的实例

    JavaScript递归实现反转数组字符串的实例 本攻略将提供如何使用JavaScript递归方法来反转字符串数组的详细步骤。反转字符串数组实现过程如下: 创建一个新函数 reverseArr 来实现反转字符串数组。 在 reverseArr 函数内, 检查当前数组中的第一个和最后一个元素,并交换它们的位置,以此反转数组。 接下来,使用递归将 reverse…

    JavaScript 2023年5月27日
    00
  • Javascript实现重力弹跳拖拽运动效果示例

    讲解“Javascript实现重力弹跳拖拽运动效果示例”的完整攻略如下: 【示例1】实现有重力的弹跳运动效果 1.效果实现思路 要实现有重力的弹跳运动效果,需要分为以下几个步骤: 定义小球元素 设置小球的初始位置和速度 定义重力加速度 实现小球的弹跳运动 给小球添加事件 2.代码实现 下面是完整的代码实现: <!DOCTYPE html> &lt…

    JavaScript 2023年6月11日
    00
  • 纯js实现的积木(div层)拖动功能示例

    下面是详细的攻略: 1. 概述 本攻略将详细讲解如何实现“纯js实现的积木(div层)拖动功能示例”。实现过程包括以下几个步骤: 设置div元素的拖动属性; 监听鼠标事件; 计算鼠标相对于被拖动元素的偏移量; 根据鼠标移动的位置,对被拖动元素进行实时更新位置; 实现停止拖拽功能。 2. 操作步骤 步骤一:设置div元素的拖动属性 在HTML代码中,我们需要将…

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