【问题标题】:Is there a way of using the following Siema arrangement on next/prev buttons instead?有没有办法在下一个/上一个按钮上使用以下 Siema 排列?
【发布时间】:2019-01-20 15:05:00
【问题描述】:

我正在使用可爱而简单的 Siema 脚本来制作一个简单的轮播。它每 4 秒自动移动到下一张幻灯片,还允许我添加上一张/下一张按钮,以便用户手动更改幻灯片。

这里是代码笔:https://codepen.io/anon/pen/ebqodx

HTML:

<div class="siema">
  <div><img src="https://pawelgrzybek.com/siema/assets/siema--pink.svg" alt="Siema image" /></div>
  <div><img src="https://pawelgrzybek.com/siema/assets/siema--yellow.svg" alt="Siema image" /></div>
  <div><img src="https://pawelgrzybek.com/siema/assets/siema--pink.svg" alt="Siema image" /></div>
  <div><img src="https://pawelgrzybek.com/siema/assets/siema--yellow.svg" alt="Siema image" /></div>
</div>

<button class="prev">Prev</button>
<button class="next">Next</button>

JS:

// perPage accepts two kind of data as a value

// Number:
// fixed amount of slider for all resolutions

// example:
// const mySiema = new Siema({
//   perPage: 2,
// });


// Object
// more complex configuration allows you to specify
// number of slides dependable of browsers viewport
// example below show single slide on small viewpoer
// 2 slider on scrrens wider than 768px
// 3 slider on scrrens wider than 1024px

// example:
// const mySiema = new Siema({
//   perPage: {
//     768: 2,
//     1024: 3,
//   },
// });
const mySiema = new Siema({
  perPage: 2,
  loop: true,
});
const prev = document.querySelector('.prev');
const next = document.querySelector('.next');

prev.addEventListener('click', () => mySiema.prev());
next.addEventListener('click', () => mySiema.next());

setInterval(() => mySiema.next(), 4000)

但是,当我单击上一个/下一个按钮(以查看特定的“幻灯片”)时,自动播放会继续并迅速将我从我想要查看的幻灯片中带走。

所以我想要实现的是:当用户使用上一个/下一个按钮时,我希望自动播放停止 60 秒,以便他们有时间阅读他们想要的幻灯片。 60 秒后,我希望自动播放像以前一样继续。

有什么办法可以做到吗?

我已经尝试过使用 setInterval 和其他一些想法,但似乎无法让它发挥作用。我看到这家伙已经能够实现我想要的了:https://codepen.io/anon/pen/aPexBe

但问题是他使用并为他的幻灯片生成分页,这是我不想要的。我希望当用户使用下一个/上一个按钮而不是分页按钮时自动播放停止。我不需要那个。

【问题讨论】:

    标签: javascript setinterval siema


    【解决方案1】:

    这是带有鼠标拖动验证的更新版本。

    const mySiema = new Siema({
      perPage: 2,
      loop: true,
    });
    var wait = 6000; // 6 secounds in ms, increase it as you like.
    const prev = document.querySelector('.prev');
    const next = document.querySelector('.next');
    
    prev.addEventListener('click', () => { Bind(wait); mySiema.prev();});
    next.addEventListener('click', () => { Bind(wait); mySiema.next();});
    
        var interval;
        var timeout;
        var mouseDown = false;
        function Bind(secound){
          clearInterval(interval);
          clearTimeout(timeout)
          if (secound){
           timeout= setTimeout(function(){
              interval= setInterval(() => mySiema.next(), 4000)
            }, secound)
          }else interval= setInterval(() => mySiema.next(), 4000)
        }
    
        $('.siema').mousedown(function(event) {
        mouseDown = true;
        }).mouseup(function(){
         var mouseDown = false;
        }).mousemove(function(e){
           if (mouseDown)
             Bind(wait);
        });
    
        Bind();
    

    【讨论】:

    • 非常感谢您!有效。还有一个问题艾伦,有什么方法可以在这种情况下添加“拖拽”吗?这样当用户拖动而不是使用下一个/上一个按钮时,它也会停止计时器。
    • 如果您的意思是 jquary 可拖动,是的,只需执行 onDrag 或 onBeforeDrag Bind(wait);。它应该工作。不要忘记投票:)
    • 我该怎么做?你能为我分享完整的代码行吗?谢谢:)
    • 嗯,你已经有阻力了。所以 jq dragabble 不是必需的。现在我已经更新了我的答案,它现在应该在拖动事件触发时等待 6 秒。还必须在移动设备上进行测试'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2015-06-23
    • 2019-10-04
    相关资源
    最近更新 更多