点击按钮时如何实现图片带过渡时长的translateX平移动画?
核心问题说明
- 属性写法错误:
translateX不是独立CSS属性,是transform属性的函数值,直接给style.translateX赋值浏览器无法识别,自然不会生效。 - 缺少过渡配置:要实现固定时长的平滑过渡,需要给元素添加
transition属性指定动画规则,否则属性变化会瞬间完成,没有动画效果。
修正步骤
步骤1:添加过渡样式
在.img的CSS规则中加入transition配置,指定对transform属性做5秒的平滑过渡:
.img { /* 原有样式保留 */ transition: transform 5s ease; }
其中5s就是动画持续时长,可根据需求调整;ease是缓动效果,也可替换为linear(匀速)、ease-in-out等其他缓动函数。
步骤2:修正JS位移写法,支持累计偏移
如果要实现每次点击都从当前位置平移指定像素,需要额外用变量存储当前的偏移量,避免每次覆盖位移值导致只能移动一次:
// 存储当前偏移量,初始为0 let offsetX = 0 function next() { offsetX -= 100 document.querySelector("#img").style.transform = `translateX(${offsetX}px)` } function pre() { offsetX += 100 document.querySelector("#img").style.transform = `translateX(${offsetX}px)` }
完整修正后代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Static Template</title> <style> .abc { width: 400px; height: 400px; background-color: red; } .img { position: absolute; top: 0vh; left: 0; background-size: 100% 100%; width: 100%; height: 50vh; opacity: 0.4; /* 新增过渡配置 */ transition: transform 5s ease; } </style> </head> <body> <div class="abc"> <img src="./a.png" class="img" id="img" /> hello </div> <button onclick="pre()">Pre</button> <button onclick="next()">Next</button> <script> let offsetX = 0 function next() { offsetX -= 100 document.querySelector("#img").style.transform = `translateX(${offsetX}px)` } function pre() { offsetX += 100 document.querySelector("#img").style.transform = `translateX(${offsetX}px)` } </script> </body> </html>
内容的提问来源于stack exchange,提问作者user944513
相关产品推荐
相关产品推荐

