Javascript初心者です。よろしくお願いいたします。
自作でスライダーを作成しているのですが、クリック・スワイプで左右にスライドさせたいです。
クリックをすると反応せず、スワイプのtouchstartの部分が反応しているようです。e.preventDefault();で止まっていると考えていたのですが違うのでしょうか?
コードも雑だと思うのですが、綺麗な書き方がありましたらご指摘いただきたいです。
よろしくお願いいたします。
参考にしたサイト: スワイプ
https://dianxnao.com/javascript%E3%81%A7%E3%82%B9%E3%83%AF%E3%82%A4%E3%83%97%E5%87%A6%E7%90%86%E3%82%92%E3%81%99%E3%82%8B/
<section> <h1>スライダー</h1> <hr> <div class="slider"> <button class="prev" id="prev"></button> <ul class="slider_list" id="slider_list"> <li class="slider_list_item"> <!--内容--> </li> <li class="slider_list_item"> <!--内容--> </li> <li class="slider_list_item"> <!--内容--> </li> <li class="slider_list_item"> <!--内容--> </li> </ul> <button class="next" id="next"></button> </div> </section>
var slider = document.getElementById('slider_list'); var movies = slider.getElementsByTagName('li'); var prev = document.getElementById('prev'); var next = document.getElementById('next'); var position = 0; var current = 0; function moviesCurrent(num) { current += num; if (current == 0) { prev.style.display = 'none'; } else if (current >= movies.length - 1) { next.style.display = 'none'; } else { prev.style.display = 'block'; next.style.display = 'block'; } } // slide var slideMove = function (num) { position += num; slider.style.transform = 'translateX(' + position + 'px)'; } prev.addEventListener('click', function () { if (current == 0) { slideMove(0) } else { slideMove(920); moviesCurrent(-1); } }, false); next.addEventListener('click', function () { if (current >= movies.length - 1) { slideMove(0); } else { slideMove(-920); moviesCurrent(1); } }, false); // swipe var setSwipe = function (elem) { var t = document.querySelector(elem); var startX; var moveX; var dist = 30; t.addEventListener('touchstart', function (e) { e.preventDefault(); startX = e.touches[0].pageX; }); t.addEventListener('touchmove', function (e) { e.preventDefault(); moveX = e.changedTouches[0].pageX; }); t.addEventListener('touchend', function (e) { if (startX < moveX && startX + dist < moveX) { if (current == 0) { slideMove(0); } else { slideMove(920); moviesCurrent(-1); } } else if (startX > moveX && startX > moveX + dist) { if (current >= movies.length - 1) { slideMove(0); } else { slideMove(-920); moviesCurrent(1); } } }); } setSwipe('.slider');
あなたの回答
tips
プレビュー