【问题标题】:Have multiple before/after comparisson sliders有多个前后比较滑块
【发布时间】:2020-11-04 10:11:34
【问题描述】:

你好,我试图循环一个之前/之后的图像滑块,但我遇到了问题,使用单个滑块它工作正常,但是一旦我将它通过 foreach 循环我只有一个工作,假设这是一个 javascript“问题“?

HTML

@foreach ($studyCases as $studyCase)
<div id="comparison">
    <figure style="background-image: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/photoshop-face-before.jpg); ">
    <div id="divisor" style="background-image: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/photoshop-face-after.jpg);"></div>
    </figure>
    <input type="range" min="0" max="100" value="50" id="slider" oninput="moveDivisor()">
  </div>

@endforeach

Javascript

var divisor = document.getElementById("divisor"),
slider = document.getElementById("slider");
function moveDivisor() { 
    divisor.style.width = slider.value+"%";
}

【问题讨论】:

    标签: javascript laravel slider comparison


    【解决方案1】:

    我认为问题在于,当您尝试执行 moveDivisor 函数时,您只引用了一个元素。 Javascript 在从文档中获取 id 时只找到一个元素,因为 id 属性在整个 HTML 中应该是唯一的。您可以尝试构建您的 HTML 结构,将循环索引添加到您的 id,如下所示:

    id="divisor-{{ $loop->index }}"
    

    然后您可以将元素 id 传递给 onclick 中的函数,以同样的方式让 javascript 知道您要到达哪个滑块:

    oninput="moveDivisor('divisor-{{ $loop->index }}')"
    

    最后一步是修改您的 javascript 以使其找到合适的元素:

    function moveDivisor(elementId) { 
        var divisor = document.getElementById(elementId);
        divisor.style.width = slider.value+"%";
    }
    

    【讨论】:

    • 是的,你完全正确!我正在考虑在 javascript 中创建一个 for 循环,但你的答案更正确。 elementId 参数将通过 oninput="moveDivisor('divisor-{{ $loop->index }}')" 映射 $loop->index:非常感谢!!
    • @RicardoPires 不客气 :) 如果你能接受我的回答,我将不胜感激。
    • 我很乐意,但显然我不能投票,我不是“15级用户”??
    • 您不能接受答案吗?它与投票无关,它在向下投票箭头下方打勾。
    • 完成了伙计 thnx!
    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多