问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js图片无缝滚动的原理是什么

发布网友 发布时间:2022-04-22 15:36

我来回答

2个回答

懂视网 时间:2022-04-29 10:21

实现原理:

图片滚动原理同图片轮播原理,同样也适用于文字滚动等一系列滚动,通过复制最后一张图片或最后一堆文字插入第一行,或复制第一张图片或一堆文字插入在结尾,来实现无缝拼接。

前提:1、必须是没有设置过渡动画的,2、重置为0的时候与当前已经滚动到的高度对于图片的位置而言肉眼看上去没变化。

实现:

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)
 }
}

推荐教程:js入门教程

热心网友 时间:2022-04-29 07:29

以垂直滚动为例:一组图片
控制它的滚动条进行滚动
且此时对这组图片进行复制并添加进原图片组中,现在就有两组图片了。你可以想象一下,现在滚动条继续滚动,原来那组图片最后一张图片已经滚至顶端且消失,复制的那组图片的第一张跟在原图最后一张图片后出现,此时你就能感觉到无缝滚动了,而就在此刻我们将滚动条高度设置为0(因为速度很快,所以不会出现停顿感),你感觉图片就这样一直不停的滚动下去了。关键点在于元素的复制、添加,以及滚动条距离的获取和修改。网上代码很多,都是基于这类构思
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王卡专属免流包是什么意思 腾讯王卡专属流量是什么意思 人防临空墙排烟机房可以留洞吗? 瑞士转机的问题? 雅阁、第九代凯美瑞、迈腾,大空间的中级车推荐 云顶之弈双人排位介绍 金铲铲之战 金铲铲段位相差多少可以一起打? 现在上海办理居住证需要本人去吗 34周加5天是几个月 孕34周是几个月了 孕34周如何预防早产 请教js如何实现截屏功能 js实现图片滚动效果 快手开店必备的工具或者软件有哪些? js中怎么调用windows的截屏工具 下载快手做电商有什么方法吗? 空调清洁剂用后会对空调有什么不好的影响吗? javascript如何截屏 快手下载如何做电商呢? 怎么用JS脚本使多张图片滚动? 如何通过JS实现图片循环滚动? 电脑开机时点了f11 现在我该点什么…急求,刚刚电脑卡死现在开不了机该怎么做 什么软件和网站可以看美剧,没有中文字幕的? IPAD 迅雷播放器 如何导入字幕 爱字幕苹果手机下载不了了 ios版qq影音怎么添加字幕 学院默示录在哪里看? 带英文字幕的视频网站有哪些? 推荐个字幕网站 字幕下载网站 什么是快手电商? js图片滚动问题。无缝滚动图片做到一半,无法写下去了。4张图片,滚动时却只显示了3张。求指导下。。 如何使用如何使用iScroll5实现移动滚动效果 下载快手如何做电商呢? 快手电商是怎么回事? 求 JS 大神,教教我图片轮播、、好心求解 快手电商怎么让代发打单 求救啊,用js实现图片左右滚动,鼠标经过图像会在滚动图像下方的固定位置显示放大图像,速度啊!!!!! js图片滚动 多组图片滚动 如何实现 快手电商2019还能做吗?快手电商2019玩法 如何用JS实现在表格内横向滚动图片 js如何控制整个页面滚动条的位置 excel批量替换行不同的字数,怎么做呢? 冰箱肉坏了 臭味怎么除 肉腐烂在冰箱怎么除臭 肉坏冰箱了怎么去除冰箱异味 梦见涔樿溅 农信社与农商银行有什么不同? 农信社和农商行的区别是什么 农信社和农商行,农合行有什么不同?