Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55
- * http://jquerymobile.com
- *
- * Copyright 2011 (c) jQuery Project
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- */
- /*
- * Stripped the touch swipe logic from jQuery Mobile and turned it into this plugin
- * Copyright 2012 (c) CodingJack - http://codecanyon.net/user/CodingJack
- * Dual licensed under the MIT or GPL Version 2 licenses.
- */
- /* USAGE
- // listen both left and right signals, the String "left" or "right" will be passed as an argument to the callback
- * $(element).touchSwipe(callback);
- // second parameter is optional and will invoke "event.stopImmediatePropagation()"
- // use this if you need to prevent other mouse events from firing on the same object when a swipe gesture is detected
- * $(element).touchSwipe(callback, true);
- // listen for only the left swipe event
- * $(element).touchSwipeLeft(callback);
- // listen for only the right swipe event
- * $(element).touchSwipeRight(callback);
- // unbind both left and right swipe events
- * $(element).unbindSwipe();
- // unbind only left swipe event
- * $(element).unbindSwipeLeft();
- // unbind only right swipe event
- * $(element).unbindSwipeRight();
- // SPECIAL NOTES
- * all methods return "this" for chaining
- * before a plugin event is added, "unbind" is called first to make sure events are never erroneously duplicated
- */
- ;(function($) {
- var touchStopEvent, touchMoveEvent, touchStartEvent,
- horizontalDistanceThreshold = 30,
- verticalDistanceThreshold = 75,
- scrollSupressionThreshold = 10,
- durationThreshold = 1000;
- if("ontouchend" in document) {
- touchStopEvent = "touchend.cj_swp";
- touchMoveEvent = "touchmove.cj_swp";
- touchStartEvent = "touchstart.cj_swp";
- }
- else {
- touchStopEvent = "mouseup.cj_swp";
- touchMoveEvent = "mousemove.cj_swp";
- touchStartEvent = "mousedown.cj_swp";
- }
- $.fn.touchSwipe = function(cb, prevent) {
- if(prevent) this.data("stopPropagation", true);
- if(cb) return this.each(swipeBoth, [cb]);
- }
- $.fn.touchSwipeLeft = function(cb, prevent) {
- if(prevent) this.data("stopPropagation", true);
- if(cb) return this.each(swipeLeft , [cb]);
- }
- $.fn.touchSwipeRight = function(cb, prevent) {
- if(prevent) this.data("stopPropagation", true);
- if(cb) return this.each(swipeRight, [cb]);
- }
- function swipeBoth(cb) {
- $(this).touchSwipeLeft(cb).touchSwipeRight(cb);
- }
- function swipeLeft(cb) {
- var $this = $(this);
- if(!$this.data("swipeLeft")) $this.data("swipeLeft", cb);
- if(!$this.data("swipeRight")) addSwipe($this);
- }
- function swipeRight(cb) {
- var $this = $(this);
- if(!$this.data("swipeRight")) $this.data("swipeRight", cb);
- if(!$this.data("swipeLeft")) addSwipe($this);
- }
- $.fn.unbindSwipeLeft = function() {
- this.removeData("swipeLeft");
- if(!this.data("swipeRight")) this.unbindSwipe(true);
- }
- $.fn.unbindSwipeRight = function() {
- this.removeData("swipeRight");
- if(!this.data("swipeLeft")) this.unbindSwipe(true);
- }
- $.fn.unbindSwipe = function(changeData) {
- if(!changeData) this.removeData("swipeLeft swipeRight stopPropagation");
- return this.unbind(touchStartEvent + " " + touchMoveEvent + " " + touchStopEvent);
- }
- function addSwipe($this) {
- $this.unbindSwipe(true).bind(touchStartEvent, touchStart);
- }
- function touchStart(event) {
- var time = new Date().getTime(),
- data = event.originalEvent.touches ? event.originalEvent.touches[0] : event,
- $this = $(this).bind(touchMoveEvent, moveHandler).one(touchStopEvent, touchEnded),
- pageX = data.pageX,
- pageY = data.pageY,
- newPageX,
- newPageY,
- newTime;
- if($this.data("stopPropagation")) event.stopImmediatePropagation();
- function touchEnded(event) {
- $this.unbind(touchMoveEvent);
- if(time && newTime) {
- if(newTime - time < durationThreshold && Math.abs(pageX - newPageX) > horizontalDistanceThreshold && Math.abs(pageY - newPageY) < verticalDistanceThreshold) {
- if(pageX > newPageX) {
- if($this.data("swipeLeft")) $this.data("swipeLeft")("left");
- }
- else {
- if($this.data("swipeRight")) $this.data("swipeRight")("right");
- }
- }
- }
- time = newTime = null;
- }
- function moveHandler(event) {
- if(time) {
- data = event.originalEvent.touches ? event.originalEvent.touches[0] : event;
- newTime = new Date().getTime();
- newPageX = data.pageX;
- newPageY = data.pageY;
- if(Math.abs(pageX - newPageX) > scrollSupressionThreshold) event.preventDefault();
- }
- }
- }
- })(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement