当前位置: 首页 > 知识库问答 >
问题:

javascript - 轮播循环时候为什么会出现闪动?

罗诚
2024-06-03

如demo中所示的轮播图,使用下一页切换,在最后一页切换到第一页面时候,即循环切换时候,如果点击较慢(或多点几次),图片会出现闪动,为什么轮播回退会出现闪动?使用的是translate3d来移动的

共有3个答案

西门京
2024-06-03

初步判断是点击过快导致的页面渲染不及时产生的闪烁,开控制台高亮轮播图可以看的更明显,我个人没啥解决闪烁的办法,但解决办法倒是简单,禁止按钮连点就行。
但轮播图一般不用你这种方法做,常见做法是复制一份追加到后面,形成"首尾链接",然后当轮播暂停的时候,把复制的"首"换成真正的首。
而且,直接用现有的库是个更好的解决方案,比如swiper
学习研究也不错

牧璞
2024-06-03

我重写了一下changeCur方法。另外您这个轮播 其实有很简单的方法就是直接利用transform去做 ,那样简单明白。

 changeCur(add){                // this.out.style.setProperty('--trans', 'transform');                this.con.style.transitionDuration = '.3s';                //切换cur方法                let cur = this.out.style.getPropertyValue('--cur');                cur = parseInt(cur);                if(add){                    // this.setCur(cur+1);                    // if(cur > this.num-1){                    //     setTimeout(() => {                    //         // cur = 1;                    //         // this.out.style.setProperty('--trans', 'none');                    //         this.con.style.transitionDuration = '0s';                    //         this.setCur(1);                    //     }, 300)                    // }                   if (cur === this.num) {                        this.con.style.transitionDuration = '0s';                        this.setCur(0);                        this.con.offsetWidth;                        this.con.style.transitionDuration = '.3s';                        this.setCur(1);                    } else {                        this.setCur(cur + 1);                    }                }                else{                    // this.setCur(cur-1);                    // if(cur < 2){                    //     // setTimeout(() => {                    //     //     // cur = this.num;                    //     //     // this.out.style.setProperty('--trans', 'none');                    //     //     this.con.style.transitionDuration = '0s';                    //     //     this.setCur(this.num);                    //     // }, 300)                    // }                    if (cur === 1) {                        this.con.style.transitionDuration = '0s';                        this.setCur(this.num + 1);                        this.con.offsetWidth;                        this.con.style.transitionDuration = '.3s';                        this.setCur(this.num);                    } else {                        this.setCur(cur - 1);                    }                }            }
罗建弼
2024-06-03

轮播图在循环切换时出现闪动的原因可能有很多,但常见的原因通常与以下几个因素有关:

  1. CSS 动画或过渡效果:如果轮播图使用了 CSS 动画或过渡效果(如 transition),那么在轮播图切换时,如果动画或过渡的结束状态没有正确设置,或者切换逻辑不够平滑,就可能导致闪动。
  2. 图片加载:如果轮播图中的图片不是预加载的,那么在切换时图片可能需要重新加载,这可能导致短暂的闪动。
  3. DOM 操作:如果在轮播图切换的过程中有大量的 DOM 操作,如移除和添加图片元素,这也可能导致页面重绘和闪动。
  4. 浏览器渲染:浏览器的渲染机制也可能导致闪动。例如,如果浏览器在渲染新图片时还没有完全完成前一个图片的渲染,就可能出现闪动。
  5. 循环逻辑问题:在轮播图循环切换时,如果逻辑处理不当,例如没有正确地处理最后一个元素到第一个元素的过渡,也可能导致闪动。

在你提供的例子中,使用了 translate3d 来移动图片。虽然 translate3d 通常会触发 GPU 加速来提高性能,但如果切换逻辑或动画处理不当,仍然可能出现闪动。

要解决这个问题,你可以尝试以下方法:

  • 优化动画和过渡效果:确保动画和过渡效果的开始和结束状态都是平滑的,并且切换逻辑是连续的。
  • 预加载图片:确保所有轮播图中的图片都已经预加载完成,避免在切换时因为图片加载导致的闪动。
  • 减少 DOM 操作:尽量避免在轮播图切换时进行大量的 DOM 操作。如果必须操作 DOM,可以尝试使用文档片段(DocumentFragment)或离屏 canvas 来减少重绘次数。
  • 检查循环逻辑:确保循环切换的逻辑是正确的,特别是从最后一个元素切换到第一个元素时的处理。

如果以上方法仍然无法解决问题,你可能需要更深入地检查你的代码和逻辑,或者考虑使用现成的轮播图库来避免这类问题。

 类似资料:
  • 最近,在运行我们的应用程序时,我们遇到了内存溢出异常。 这是异常发生之前的堆转储 看起来老根差不多吃饱了(76%)。我假设当它最终达到100%时,OOM就会发生。然而,看起来eden只有13%。 有人能解释为什么即使年轻一代还有一些空间,OOM也会发生吗?

  • 我是Java新手。我正在尝试遍历一个文件并将每个字符串写入ArrayList。为此,我有如下代码: 然而,由于某种原因,这段代码陷入了无限循环。即使我将打印语句作为当块的第一行,它也不会执行。 accountData.txt文件是这样排列的: 我已经读了很多遍,经常读到这是个问题,因为人们没有用Scanner.next()来移动指针,但我相信我正在这样做。我不知道哪里出了问题。 感谢您的帮助!

  • 本文向大家介绍为什么会出现浮动?在什么时候需要清除浮动呢?相关面试题,主要包含被问及为什么会出现浮动?在什么时候需要清除浮动呢?时的应答技巧和注意事项,需要的朋友参考一下 @xiangshuo1992 是的,有相关联,第75天的题是问了它的工作原理,今天是问它为什么会出现浮动,还是有些区别。呵呵,我出题时,就猜到你会记得之前有出过了……果然

  • 问题内容: 以下示例在Node.js书中给出: 解释了while循环为何阻止执行时,作者说: 节点将永远不会执行超时回调,因为事件循环卡在了循环中,而循环在第7行开始了,因此永远不会给它处理超时事件的机会! 但是,作者没有解释为什么这是在事件循环的背景下发生的,还是在幕后真正发生了什么。 有人可以详细说明吗?为什么节点卡住?以及如何在保留控制结构的同时更改上述代码,以使事件循环不会被阻塞,并且代码

  • 本文向大家介绍Objective-C实现无限循环轮播器,包括了Objective-C实现无限循环轮播器的使用技巧和注意事项,需要的朋友参考一下 先看看效果图: 具体实现代码: 1. 控制器     2. 显示内容界面设置 以上就是本文的全部内容,希望对大家的学习有所帮助。

  • 本文向大家介绍js实现图片无缝循环轮播,包括了js实现图片无缝循环轮播的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现图片无缝循环轮播的具体代码,供大家参考,具体内容如下 代码如下 更多关于轮播图效果的专题,请点击下方链接查看学习 javascript图片轮播效果汇总 jquery图片轮播效果汇总 Bootstrap轮播特效汇总 以上就是本文的全部内容,希望对大家的学习有所帮