
JavaScriptだけでスワイプ処理追加
JavaScriptだけでスワイプ処理を実装は以下のようなコードになる。
関数を作成しておけば要素を指定するだけで良い。
function setSwipe(elem) {
var t = document.querySelector(elem);
var r = document.getElementById('result');
var startX;
var startY;
var moveX;
var moveY;
var dist = 30;
t.addEventListener('touchstart', function(e) {
e.preventDefault();
startX = e.touches[0].pageX;
startY = e.touches[0].pageY;
});
t.addEventListener('touchmove', function(e) {
e.preventDefault();
moveX = e.changedTouches[0].pageX;
moveY = e.changedTouches[0].pageY;
});
t.addEventListener('touchend', function(e) {
if (startX > moveX && startX > moveX + dist) {
r.textContent = '右から左にスワイプ';
} else if (startX < moveX && startX + dist < moveX) {
r.textContent = '左から右にスワイプ';
}
});
}
setSwipe('#t');
setSwipe('.foo .bar');
touchmoveイベントなどはパソコンではChromeのエミュレータなどを使用しないと発生しないので注意。
カルーセル(スライダー)にスワイプを実装
カルーセル(スライダー)にスワイプを実装するとこのようなコードになる。現在地を示すnav(小さい丸)も下に入れておくと良いだろう。
function setSwipe(elem) {
var t = document.querySelector(elem);
var tc = document.querySelector(elem + '> ul');
var len = document.querySelectorAll(elem + '> ul > li').length;
var startX;
var startY;
var moveX;
var moveY;
var dist = 30;
var pos = 1;
var nav = document.createElement('ul');
nav.className = 'nav';
for (var i = 0; i < len; i++) {
var li = document.createElement('li');
if (i === 0) {
li.className = 'active';
}
nav.appendChild(li);
}
t.parentNode.insertBefore(nav, t.nextElementSibling);
var navLi = document.querySelectorAll('.nav > li');
t.addEventListener('touchstart', function(e) {
e.preventDefault();
startX = e.touches[0].pageX;
startY = e.touches[0].pageY;
});
t.addEventListener('touchmove', function(e) {
e.preventDefault();
moveX = e.changedTouches[0].pageX;
moveY = e.changedTouches[0].pageY;
});
t.addEventListener('touchend', function(e) {
navLi[pos - 1].classList.remove('active');
if (startX > moveX && startX > moveX + dist && pos < len) {
pos++;
} else if (startX < moveX && startX + dist < moveX && pos > 1) {
pos--;
}
tc.className = 'pos' + pos;
navLi[pos - 1].classList.add('active');
});
}
setSwipe('.carousel');

