前 | 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(); } } }); } }