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

yizhihongxing

当根据文章中提供的攻略,我们可以用不到十行的原生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日

相关文章

  • 页面间固定参数,通过cookie传值的实现方法

    实现页面间固定参数的传递,可以借助Cookie来实现。Cookie是一种在客户端保存数据的机制。在使用Cookie的过程中,客户端与服务器之间都会传输Cookie的值,这就使得在页面加载完成之后,Cookie中的值可以通过JavaScript等方式进行读取。 以下是实现方法: 1.页面A设置Cookie储存需要传递的参数 // 设置Cookie docume…

    JavaScript 2023年6月11日
    00
  • JavaScript实现手写promise的示例代码

    下面是详细讲解“JavaScript实现手写promise的示例代码”的完整攻略。 理解promise 在讲解如何手写promise之前,我们先来理解一下promise,它是一个用来处理异步操作的对象。在promise中,一个异步操作被包装成一个状态机对象,该状态机由三个状态组成——pending(等待中)、fulfilled(完成)、rejected(拒绝…

    JavaScript 2023年5月28日
    00
  • JS面试题解[‘1’, ‘7’, ’11’].map(parseInt) 输出

    题目描述:给定数组 [‘1’, ‘7’, ’11’],执行 [‘1’, ‘7’, ’11’].map(parseInt),输出什么? 首先,让我们看看 map、parseInt 函数的用法和参数形式。 map 函数 map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。 arr.map(callback(currentV…

    JavaScript 2023年5月28日
    00
  • JavaScript常见事件处理程序实例总结

    下面是“JavaScript常见事件处理程序实例总结”的完整攻略: 简介 在Web开发中,事件处理程序是常用的技术,其在页面交互、动态特效、表单验证等方面都有广泛应用。JavaScript作为一门客户端语言,提供了丰富的事件处理程序实现方式,比如DOM0级事件处理程序、DOM2级事件处理程序、事件委托、自定义事件等技术。 本文将详细介绍JavaScript常…

    JavaScript 2023年5月28日
    00
  • JSON中key动态设置及JSON.parse和JSON.stringify()的区别

    JSON中key动态设置指的是在JavaScript中向JSON对象动态添加属性名(key),这样的JSON对象在另一个需要使用这些属性的函数或者方法中外部作用域仍然可以进行访问。但在正常情况下,我们无法使用字符串拼接的方式来动态设置JSON中的key,这时候就需要借助ES6中的计算属性名(Computed Property Names)来实现。 计算属性名…

    JavaScript 2023年5月27日
    00
  • js图片加载效果实例代码(延迟加载+瀑布流加载)

    JS图片加载效果是前端开发中非常重要的一环,以提升用户体验为目标,延迟加载和瀑布流加载成为了当前常见的两种图片加载效果。 什么是延迟加载 延迟加载,也叫懒加载,在一个页面中存在很多图片时,没有必要一次性加载所有图片,而是可以只加载第一屏或者可见区域内的图片,当用户向下滚动页面,再异步地去加载剩下的图片。这样可以有效减少页面的加载时间。 实现延迟加载的代码示例…

    JavaScript 2023年6月11日
    00
  • js实现轮播图的完整代码

    下面是JavaScript实现轮播图的完整攻略,包含两条示例说明: 一、代码实现步骤 选中需要轮播的元素和轮播的图片,通过DOM操作获取其元素节点。 js let slider = document.querySelector(“.slider”); let img = document.querySelectorAll(“.slider img”); 设置…

    JavaScript 2023年6月11日
    00
  • 探讨:JavaScript ECAMScript5 新特性之get/set访问器

    探讨:JavaScript ECMA Script 5 新特性之 get/set 访问器 简介 ECMA-262 第五版(ECMA Script 5)是 JavaScript 编程语言的最新发布的标准,它包含了一些新的语法以及 ECMAScript 3 上的扩展。 其中一个新增的重要特性是 get 和 set 访问器,这两个方法提供了一种对象属性的访问方式,…

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