10行原生JS实现文字无缝滚动(超简单)

当根据文章中提供的攻略,我们可以用不到十行的原生JS代码实现文字无缝滚动的效果。下面逐步解读这个攻略的实现过程:

第一步:获取DOM元素

首先,需要获取到需要滚动的文字所在的DOM元素。这可以通过document.querySelector()方法来获取。在示例中,需要滚动的文字是包含在一个<div>元素中的,其class为scroll-wrap

const wrapper = document.querySelector('.scroll-wrap');

第二步:克隆DOM元素

由于文字需要无缝滚动,所以需要先将DOM元素克隆一份,再将其添加到原DOM元素的后面,以便实现无缝滚动的效果。

const cloneNode = wrapper.cloneNode(true);
wrapper.appendChild(cloneNode);

注:cloneNode()方法一定要带上true参数才能成功克隆一个节点的所有属性和子节点。

第三步:滚动效果

接下来,通过对克隆后的DOM元素的transform属性进行不断的修改来实现滚动的效果。

let timer = setInterval(() => {
  let d = wrapper.scrollTop++;
  if (d >= cloneNode.offsetTop) {
    wrapper.scrollTop = 0;
  }
}, 20);

这里通过设置一个定时器,每20ms对DOM元素的scrollTop属性进行自增来实现滚动的效果。每次滚动结束的判断条件是克隆DOM节点的高度已经被完全滚过去了,此时需要将DOM元素的scrollTop属性重置为零。

示例说明一

假如需要将滚动的文字换成一个<ul>元素中的数据,该怎么进行修改呢?下面给出一个简单的修改示例。

const list = document.querySelector('.scroll-list'); // 获取需要滚动的列表
const cloneList = list.cloneNode(true); // 克隆列表
list.insertAdjacentElement('afterend', cloneList); // 添加克隆列表到原列表后面

let timer = setInterval(() => {
  let d = list.scrollTop++;
  if (d >= cloneList.offsetTop) {
    list.scrollTop = 0;
  }
}, 20);

示例说明二

如果需要在滚动的过程中加入鼠标悬停事件来停止滚动,该怎么实现呢?下面是一个修改示例。

const wrapper = document.querySelector('.scroll-wrap');
const cloneNode = wrapper.cloneNode(true);
wrapper.appendChild(cloneNode);

let timer = setInterval(() => {
  let d = wrapper.scrollTop++;
  if (d >= cloneNode.offsetTop) {
    wrapper.scrollTop = 0;
  }
}, 20);

wrapper.addEventListener('mouseenter', () => {
  clearInterval(timer); // 鼠标停留时清除定时器
});

wrapper.addEventListener('mouseleave', () => {
  timer = setInterval(() => { // 鼠标离开时再次添加定时器
    let d = wrapper.scrollTop++;
    if (d >= cloneNode.offsetTop) {
      wrapper.scrollTop = 0;
    }
  }, 20);
});

在示例中添加了wrapper.addEventListener()来监听滚动元素的鼠标悬停事件,当鼠标悬停时,清除滚动效果的定时器;而当鼠标离开时,重新创建定时器,实现滚动效果的重新开始。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:10行原生JS实现文字无缝滚动(超简单) - Python技术站

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

相关文章

  • Js四则运算函数代码

    以下是Js四则运算函数代码的完整攻略: 1. 前置知识 在编写Js四则运算函数之前,需要熟悉Js语言的基础语法,尤其是关于函数定义和调用、变量声明和赋值、条件语句、循环语句等方面的知识。此外,还需要掌握JavaScript的数学运算操作符,例如加法+、减法-、乘法*、除法/等。 2. 实现思路 四则运算函数的实现可以分为以下几个步骤: 1) 从用户输入获取两…

    JavaScript 2023年5月27日
    00
  • 基于javascript实现动态显示当前系统时间

    实现动态显示当前系统时间的方法之一是基于javascript语言。下面是基于javascript实现动态显示当前系统时间的攻略: 实现方法 要实现动态显示当前系统时间,可以使用以下步骤: 创建一个HTML页面,并在页面中添加一个<div>元素,用于容纳显示系统时间的内容。 在<div>元素中添加一个空的<span>元素,用…

    JavaScript 2023年6月10日
    00
  • js+css实现增加表单可用性之提示文字

    这里给出JS和CSS实现增加表单可用性之提示文字的完整攻略。 攻略详解 概述 表单是我们日常工作和生活中不可或缺的一部分,为了方便用户填写表单时可以更加清晰明了地知道每个输入框的作用,我们需要在表单中添加提示文字。在这里,我们可以通过JS和CSS的组合,为表单添加提示文字,并且在用户输入时自动隐藏。 实现步骤 首先,在HTML代码中为表单添加一个CSS类名,…

    JavaScript 2023年6月10日
    00
  • 浅析JavaScript中的typeof运算符

    浅析JavaScript中的typeof运算符 介绍 typeof 是 JavaScript 中的一个运算符,它的作用是检测一个值的数据类型。typeof 运算符在表达式中返回一个字符串,字符串表示操作数的数据类型。 语法 typeof参数:要检测类型的值 运算结果 当使用 typeof 操作符时,会返回以下值: “undefined”,如果这个值未定义(u…

    JavaScript 2023年6月10日
    00
  • js判断上传文件后缀名是否合法

    我们来详细讲解一下“js判断上传文件后缀名是否合法”的攻略。 1. 获取文件的后缀名 在判断上传文件的后缀名是否合法时,需要先获取到上传的文件的后缀名。可以通过以下代码来获取文件后缀名: var fileName = "example.jpg"; // 假设上传的文件名为 example.jpg var fileExtension = f…

    JavaScript 2023年5月27日
    00
  • JS数据类型分类及常用判断方法

    JS数据类型分类及常用判断方法 数据类型分类 JavaScript有7种数据类型,分别为: 原始类型(primitive): undefined null boolean number string symbol(ES6新增) 引用类型(object): Object Array Function Date RegExp Error Math JSON 常用…

    JavaScript 2023年6月10日
    00
  • JS字符串累加Array不一定比字符串累加快(根据电脑配置)

    本文主要探讨 JavaScript 中字符串的拼接方式,包括使用数组累加字符串和直接字符串累加的方法,以及它们的性能比较。同时,本文还会详细介绍具体的测试方法和结果分析。 背景 在 JavaScript 中,字符串是一个常见的数据类型,我们通常会遇到需要拼接字符串的场景,比如将一个数组中的元素用逗号隔开成一个字符串。在这种场景下,我们通常采用以下两种方式: …

    JavaScript 2023年5月28日
    00
  • 原生js实现日期计算器功能

    非常感谢您对“原生js实现日期计算器功能”的关注。下面是我对这个话题的详细讲解,希望能够帮助到您。 什么是日期计算器功能? 日期计算器功能指的是在网页上实现日期的计算,如计算两个日期之间相差的天数、周数、月数、年数等等。这个功能在实际的项目中很常见,比如生日计算器、工作日计算器等等。 使用JavaScript实现日期计算器功能 原生JavaScript能够轻…

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