css一张图无限循环滚动,纯css实现单张图片无限循环无缝滚动,

本文介绍了一种使用CSS关键帧动画实现图片滚动效果的方法。通过动态计算图片的实际高度和容器的高度差,来设置不同阶段的 translateY 值,使得图片能够在容器内平滑滚动并暂停。该方法兼容多种浏览器,包括 Webkit、Moz、O 和标准 keyframes。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

functionaddKeyFrames(height,offsetHeight){

let style= document.createElement('style');

style.type= 'text/css';

let keyFrames= '\

@-webkit-keyframes scrollUpAndPause {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

40% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

}\

@-moz-keyframes scrollUpAndPause {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

40% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

}\

@-o-keyframes scrollUpAndPause {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

40% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

}\

@keyframes scrollUpAndPause {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

40% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(A_DYNAMIC_VALUE);\

}\

}\

@-webkit-keyframes scrollUp {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(B_DYNAMIC_VALUE);\

}\

}\

@-moz-keyframes scrollUp {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(B_DYNAMIC_VALUE);\

}\

}\

@-o-keyframes scrollUp {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(B_DYNAMIC_VALUE);\

}\

}\

@keyframes scrollUp {\

0% {\

-webkit-transform: translateY(0);\

transform: translateY(0);\

}\

100% {\

-webkit-transform: translateY(0);\

transform: translateY(B_DYNAMIC_VALUE);\

}\

}';

keyFrames= keyFrames.replace(/A_DYNAMIC_VALUE/g, '-'+(height-(offsetHeight-height)/2)+'px');

keyFrames = keyFrames.replace(/B_DYNAMIC_VALUE/g, '-'+height+'px');

style.innerHTML=keyFrames;

document.getElementsByTagName('head')[0].appendChild(style);

}//初始化图片滚动动画高度

functioninitAnimate() {

const adLeftHeight= document.getElementById("adLeft").offsetHeight; //左侧区域高度

const adLeftWidth = document.getElementById("adLeft").offsetWidth; //左侧区域宽度

let leftImage = newImage();

let leftImageWidth= "";

let leftImageHeight= "";

leftImage.src=window.campaign.image_url;

leftImage.onload= function() {

leftImageWidth=leftImage.width;

leftImageHeight=leftImage.height;

let imageRealHeight= adLeftWidth * (leftImageHeight /leftImageWidth);//const imageBoxScrollHeight = document.getElementById("imageBox").scrollHeight; // 三张图片的总高度

//const imageHeight = imageBoxScrollHeight/3;// 单张图片高度

addKeyFrames(imageRealHeight,adLeftHeight);

}

}

### 使用 CSS3 实现 Vue 图片墙组件的无限循环无缝滚动 为了实现一个高效的无限循环无缝滚动效果,可以采用 CSS 解决方案来减少 JavaScript 的开销并提高性能。下面介绍一种通过 CSS 动画和伪类相结合的方式。 #### HTML 结构设计 创建一个容器用于容纳所有的图片项,并确保这些图片能够水平排列: ```html <div class="carousel-container"> <ul class="carousel-list"> <!-- 单个列表项 --> <li v-for="(item, index) in items" :key="index" class="carousel-item"> <img :src="item.src"/> </li> <!-- 复制首尾两个元素以平滑过渡 --> <li class="carousel-item clone-first"><img src="{{items[0].src}}"/></li> <li class="carousel-item clone-last"><img src="{{items[items.length - 1].src}}"/></li> </ul> </div> ``` #### 关键样式定义 利用 `@keyframes` 定义动画路径以及设置初始状态与结束状态之间的变化;同时应用 `transform translateX()` 来控制位移距离。注意这里的宽度计算应该考虑实际内容加上额外复制的内容[^2]。 ```css .carousel-container { overflow: hidden; } .carousel-list { display: flex; animation-name: slideLoop; animation-duration: 8s; /* 可调整 */ animation-timing-function: linear; animation-iteration-count: infinite; } .carousel-item { min-width: 25%; /* 假设每张占据四分之一空间 */ } /* 额外添加的关键帧规则 */ @keyframes slideLoop { from { transform: translateX(0); } to { transform: translateX(-{{ (imagesCount + 1) * itemWidth }}px); } } .clone-first, .clone-last{ position:absolute; } ``` 此方法的核心在于巧妙地处理了视觉上的连续性和物理位置上的重置,从而实现了真正的无间断滚动体验。对于 Vue.js 应用程序来说,只需要关注数据绑定部分即可轻松集成该功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值