javascript实现单张或多张图片持续无缝滚动

javascript实现单张或多张图片持续无缝滚动

背景:

想要实现图片持续滚动,既然使用js,就千万不要加css动画、过渡等相关样式,如果想要滚动的平滑一下,可以一像素一像素的感动,则很平滑,如果加了过渡动画,当图片重置为0时,会有往回倒的动画效果,跟预期不符。

推荐:《javascript高级教程

原理:

图片滚动原理同图片轮播原理,同样也适用于文字滚动等一系列滚动,通过复制最后一张图片或最后一堆文字插入第一行,或复制第一张图片或一堆文字插入在结尾,来实现无缝拼接,前提:1、必须是没有设置过渡动画的,2、重置为0的时候与当前已经滚动到的高度对于图片的位置而言肉眼看上去没变化。

立即学习“Java免费学习笔记(深入)”;

实现:

html主要包含三块:

1、最外层盒子,用来展示滚动图的区域,overflow:hidden;

2、滚动的盒子,主要改变该盒子的定位值,来实现滚动,里面包含所有要滚动的图片或文字

3、包含图片或文字的盒子。

 

代码:

class Roll {    constructor(opts) {        this.elem = opts.elem; // 图片包含滚动长度的元素的        this.elemBox = opts.elemBox; //图片展示区域元素,为了获取展示区域的高度        this.direction = opts.direction;        this.time = opts.time;        this.init();        this.roll = this.roll.bind(this)        this.startRoll = this.startRoll.bind(this)        this.stopRoll = this.stopRoll.bind(this)    }    init(){        this.elemHeight = this.elem.offsetHeight;        this.elemHtml = this.elem.innerHTML;        this.elem.innerHTML = this.elem.innerHTML + this.elemHtml+ this.elemHtml;        this.speed;        // 如果向上滚或者向左滚动每次减1,向下滚或者向右滚动每次加1        if(this.direction === 'top' || this.direction === 'left'){            this.speed = -1;        }else{            this.speed = 1;        }    }    roll(){        switch (this.direction) {            case "top":                // 如果滚动的盒子的top值超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetTop) >= this.elemHeight){                    this.elemBox.style.top = 0;                }else{                    this.elemBox.style.top = this.elemBox.offsetTop + this.speed + 'px';                }                break;            case "bottom":                // 如果滚动的盒子的bottom值超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetBottom) >= this.elemHeight){                    this.elemBox.style.bottom = 0;                }else{                    this.elemBox.style.bottom = this.elemBox.offsetBottom + this.speed + 'px';                }                break;            case "left":                // 如果滚动的盒子的left超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetLeft) >= this.elemHeight){                    this.elemBox.style.left = 0;                }else{                    this.elemBox.style.left = this.elemBox.offsetLeft + this.speed + 'px';                }                break;            case "right":                // 如果滚动的盒子的right超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetRight) >= this.elemHeight){                    this.elemBox.style.right = 0;                }else{                    this.elemBox.style.right = this.elemBox.offsetRight + this.speed + 'px';                }                break;            default:                // 默认向上滚动,如果滚动的盒子的top超出元素的高度,则置为0                if(Math.abs(this.elemBox.offsetTop) >= this.elemHeight){                    this.elemBox.style.top = 0;                }else{                    this.elemBox.style.top = this.elemBox.offsetTop + speed + 'px';                }        }    }    stopRoll(){        clearInterval(this.scrollTimer)    }    startRoll(){        this.scrollTimer = setInterval(this.roll,this.time)    }}

登录后复制

以上就是javascript实现单张或多张图片持续无缝滚动的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2728618.html

(0)
上一篇 2025年3月7日 23:58:12
下一篇 2025年3月7日 08:19:18

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript如何实现鼠标左键拖拽效果

    实现鼠标左键拖拽效果的两种方式: 方式一: nbsp;html>            Document     .move { width: 100px; height: 100px; background: red; border…

    2025年3月7日
    200
  • JavaScript 如何实现横向瀑布流

    最近在做一个小程序项目,在 UI 上借鉴了一下其他 App 设计,其中有一个图片横向布局铺满的 UI 感觉挺好看的,类似于传统的瀑布流布局横过来一样。于是就自己实现了一下,并且将原本的横向两张图的方法扩展了下,改成了可以自定义显示张数的方法…

    2025年3月7日
    200
  • javascript数据类型分为哪两类

    javascript数据类型分为: 值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。 引用数据类型:对象(Object)、数组(Arra…

    2025年3月7日 编程技术
    200
  • javascript对象是如何定义的

    首先,对象也是一个变量,但对象可以包含多个变量。对象是变量的容器。 用var关键字来定义对象。 JavaScript用一个{…}表示一个对象,键值对以xxx: xxx形式申明,用,隔开。 示例: var 对象名字={属性方法 var xia…

    2025年3月7日
    200
  • 如何理解javascript中的函数概念

    什么是函数? 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。 我们来举一个小例子: 当我们点击按钮时,会弹出如下图所示的警告框: 立即学习“Java免费学习笔记(深入)”; 语法格式: function functionnam…

    2025年3月7日 编程技术
    200
  • javascript如何实现将两个数组合并

    将两个数组合并的方法有: 方法一:使用concat var a = [1,2,3];var b = [4,5,6]; 登录后复制 var c = a.concat(b);//c=[1,2,3,4,5,6]; 登录后复制 方法二:使用循环 f…

    2025年3月7日
    200
  • JavaScript 对象可以做到的几件事

    除了普通的对象属性赋值和遍历之外,我们还可以使用 javascript 对象执行许多其他操作。在本文中,我们将了解如何使用它们,包括访问内部属性、操作属性描述符和继承只读属性。 1. 访问内部属性 JavaScript 对象无法以常规方式访…

    编程技术 2025年3月7日
    200
  • js基础知识

    js基础概念 js的局部变量和全局变量 js的数据类型 var是弱数据类型, 但js是能识别他的数据类型的        function abc(){ var a=1; var b=”张三”; var c=true; var d=new …

    2025年3月7日 编程技术
    200
  • JavaScript对象迭代方法和性能的比较

    object.entries 返回对象所有可枚举的键值对,不会追寻原型链上的 key let obj = {  key1: ‘value1’,  key2: ‘value2’,  key3: ‘value3’,}Object.entries…

    编程技术 2025年3月7日
    200
  • javascript阻塞问题

    javascript 阻塞程序运行 javascript的线程问题 JavaScript 是单线程的,一段 Js 程序的运行会占满整个程序进程,我们通常会想方设法的通过异步编程来减少程序的阻塞,但在某些特殊的场景下我们需要阻塞程序的运行,那…

    编程技术 2025年3月7日
    200

发表回复

登录后才能评论