我需要滑块预览按图像移动,但现在它立即移动到末尾

我试着用两个按钮创建预览滑块:向左和向右,但当我按向右时,它移到了最后,而我需要它按图像移动 以下是链接: https://codepen.io/alexvambato/pen/yLGBxKK

<div class="img-container1" style="float:left; margin:10px;max-width: 530px">
<!-- Create slider. -->
<style>
/* See the styles on codepen.io */
</style>
<div id="thumbelina" style="padding:5px;overflow: hidden;">
<button class="btnToLeft" onclick="toMovel()"><</button>
    <ul id="thumbelina0" style="padding:0px; width:max-content; text-align:center;display: flex;margin-bottom: 0px;margin-left: 0px;">
    <li style="padding:5px;width: auto;height: 100px;display: block;"><img src="{{preview_image}}" style="margin-top: -5px;margin-left: -5px;" /></li>
      <li style="padding:5px;width: auto;height: 100px;display: block;"><img src="{{preview_image}}"  style="margin-top: -5px;margin-left: -5px;" /></li>
      <li style="padding:5px;width: auto;height: 100px;display: block;"><img src="{{preview_image}}"  style="margin-top: -5px;margin-left: -5px;" /></li>
      <li style="padding:5px;width: auto;height: 100px;display: block;"><img  style="margin-top: -5px;margin-left: -5px;" /></li>
      <li style="padding:5px;width: auto;height: 100px;display: block;"><img src="{{preview_image}}"  style="margin-top: -5px;margin-left: -5px;" /></li>
      <li style="padding:5px;width: auto;height: 100px;display: block;"><img src="{{preview_image}}" style="margin-top: -5px;margin-left: -5px;" /></li>
    </ul>
<button class="btnToRight" onclick="toMove()">></button>
</div>
</div>
<script>
function toMove() { 
var move = document.querySelector('#thumbelina0');
move.setAttribute('style', 'padding:0px; width:max-content; text-align:center;display: flex;margin-bottom: 0px;margin-left: -300px;')
}
function toMovel() { 
var move = document.querySelector('#thumbelina0');
move.setAttribute('style', 'padding:0px; width:max-content; text-align:center;display: flex;margin-bottom: 0px;margin-left: 0px;')
}
</script>

推荐答案

您需要获取当前图像的宽度,并根据该值增加/减少容器的边距,而不是固定的-300px0px.

没有对其进行测试,但这可能会起作用:

let currentIndex = 0;

function toMove() { 
  const slider = document.querySelector('#thumbelina0');
  const element = document.querySelectorAll('li')[currentIndex];
  
  // there seems to be a hard-coded 10px in your style
  slider.style.marginLeft = parseInt(slider.style.marginLeft) - element.offsetWidth - 10 + 'px';
  
  currentIndex++;
}

对于向左移动元素,这是一个相反的操作,因此您只需要开始添加元素宽度,而不是减go 它.

这是一个快捷的解决方案,但我的建议是使用滚动偏移量,而不是使用像margin-left这样的css.

Javascript相关问答推荐

为什么JavaScript双边字符串文字插值不是二次的?

*ngFor和@代表输入decorator 和选角闭合

将json数组项转换为js中的扁平

使用useup时,React-Redux无法找到Redux上下文值

康威的生活游戏规则在我的Javascript版本中不起作用.''我做错了什么?

用JavaScript复制C#CRC 32生成器

如何调用名称在字符串中的实例方法?

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

本地库中的chartjs-4.4.2和chartjs-plugin-注解

元素字符串长度html

在SHINY R中的嵌套模块中,不能使用Java代码

在不扭曲纹理的情况下在顶点着色器中旋转UV

JavaScript:如果字符串不是A或B,则

如何使用Astro优化大图像?

更改agGRID/Reaction中的单元格格式

在GraphQL解析器中修改上下文值

在高位图中显示每个y轴系列的多个值

JavaScript:多个图像错误处理程序

使用Perl Selify::Remote::Driver执行Java脚本时出错

我想为我的Reaction项目在画布上加载图像/视频,图像正在工作,但视频没有