| 前 | 2016年 3月 |
次 | ||||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 | ||
自作のプラグイン、習作なのです.
タッチ環境、マウス環境量対応、指定した ID 上で右フリック動作すると callback を呼び出す.
デフォルトでは一定距離(タッチは画面サイズの 1/5、PC は 80px)を、一定時間以内(600ms)に行うと発火する.
縦寄り方向や左方向、移動距離不足やゆっくり(600ms以上)であれば動かない.
使い方は単純に $(ID).flickBeside(callback [,ウェイト(ms)]); としてみた.
$.fn.flickBeside = function(callback, wT) {
var self = this;
callback = callback? callback: function(){};
wT = wT? wT: 600;
if ("ontouchstart" in window) {
// touch
var cFlag = false;
self.on({
'touchstart': function(e) {
this.touchX = event.changedTouches[0].pageX;
this.touchY = event.changedTouches[0].pageY;
this.sT = new Date();
cFlag = true;
},
'touchmove': function(e) {
if (cFlag) {
var moveX = event.changedTouches[0].pageX - this.touchX,
moveY = event.changedTouches[0].pageY - this.touchY;
if (moveY == 0) moveY = 1;
var moveRate = Math.abs(moveX / moveY);
if ((moveRate < 3) || (moveX < 0)) {
// 縦寄り または 左方向 は キャンセル
cFlag = false;
e.stopPropagation();
}
}
},
'touchend': function(e) {
if (cFlag) {
var eT = new Date() - this.sT;
if (eT < wT) {
// 早い時だけ 動作
var moveX = event.changedTouches[0].pageX - this.touchX;
// 20%以上移動で 動作
if (moveX > $(window).width() / 5) callback.apply;
}
}
}
});
} else {
// mouse
self.on({
'mousedown': function(e) {
this.sX = e.clientX;
this.sY = e.clientY;
this.sT = new Date();
},
'mouseup': function(e) {
var moveX = e.clientX - this.sX,
moveY = e.clientY - this.sY,
eT = new Date() - this.sT;
if (moveY == 0) moveY = 1;
var moveRate = Math.abs(moveX / moveY);
if ((moveRate < 3) || (moveX < 80) || (eT > wT)) {
// 縦寄り または 80px未満 または ゆっくり は キャンセル
e.stopPropagation();
} else {
callback.call();
}
}
});
}
}