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动画效果代码。 准备工作 在编写动画代码前,需要准备好HTML文件和CSS文件。 HTML文件 假设需要给一个按钮添加动画效果,我们可以在HTML文件中添加一个按钮元素,如: <button id="btn">按钮</button> CSS文件 我们要将按钮的样式设为相对定位(…

    JavaScript 2023年6月10日
    00
  • JavaScript基础系列之函数和方法详解

    下面是“JavaScript基础系列之函数和方法详解”的完整攻略: 1. 函数的定义和调用 1.1 函数的定义 函数的定义可以使用 function 关键字,语法如下: function functionName(parameter1, parameter2) { // Function body } 其中 functionName 表示函数名,parame…

    JavaScript 2023年5月18日
    00
  • js实现精确到秒的倒计时效果

    实现精确到秒的倒计时效果,需要以下几个步骤: 1. 获取时间戳 首先,我们需要获取当前时间的时间戳(单位为毫秒),可以使用JavaScript内置的Date.now()方法获取到当前的时间戳,例如: const now = Date.now(); 2. 计算倒计时时间 接下来,需要通过时间戳计算出倒计时结束的时间。假如需要倒计时10秒钟,可以使用如下代码计算…

    JavaScript 2023年5月27日
    00
  • 详解js实时获取并显示当前时间的方法

    当我们开发网页时,有时需要在页面上显示当前的时间。下面是使用JavaScript实时获取并显示当前时间的三种方法。 方法1:使用setInterval()函数 setInterval()函数可以每隔一定时间间隔执行一次function中的代码。我们可以使用这个函数每秒钟更新时间。 <!DOCTYPE html> <html> <…

    JavaScript 2023年5月27日
    00
  • JS如何实现一个单文件组件

    要实现一个单文件组件,我们需要使用Vue.js这个通用的组件框架来开发。 以下是实现一个单文件组件的步骤: 第一步:安装和配置Vue.js 在项目文件夹下运行以下命令安装Vue.js npm install -g vue 创建一个Vue项目 vue create my-project 运行Vue项目 cd my-project npm run serve 第…

    JavaScript 2023年5月27日
    00
  • 利用Vconsole和Fillder进行移动端抓包调试方法

    利用Vconsole和Fillder进行移动端抓包调试,是移动端开发过程中非常重要的技能之一。这种方法可以帮助我们更快地定位和解决移动端页面的bug或性能问题,提高开发效率和用户体验。下面,我会详细讲解这种方法的完整攻略。 简介 Vconsole是一个基于web的移动端调试工具,可以方便快捷的在移动端进行日志输出、元素查找、网络请求、性能分析等操作。Fill…

    JavaScript 2023年6月11日
    00
  • js屏蔽F12审查元素,禁止修改页面代码等实现代码

    实现屏蔽F12审查元素和禁止修改页面代码需要结合JavaScript和HTML的相关特性。以下是一个完整的攻略: 1. 使用JavaScript禁止页面右键功能 在页面中加入以下JavaScript代码,可以禁止页面的右键功能: document.oncontextmenu = function () { return false; } 以上代码中,docu…

    JavaScript 2023年6月10日
    00
  • 如何使用PHP实现javascript的escape和unescape函数

    要在PHP中实现JavaScript的escape和unescape函数,我们可以使用PHP的内置函数urlencode和urldecode。 1.使用urlencode(类似于escape函数)进行编码 urlencode函数将字符串编码为类似于escape函数的格式。它将所有非字母数字字符(除了-_.)都替换为百分比加上其十六进制值的编码。 以下是使用u…

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