From 713daa9d986746c5afe1aac0107a29e3dd366b0c Mon Sep 17 00:00:00 2001 From: Gilles Grousset Date: Thu, 28 Feb 2013 23:02:36 +0100 Subject: [PATCH] Don't Stop 'touchend' Propagation all the time Details exposed here : https://github.com/zippy1978/jquery.scrollz/issues/8 --- dist/jquery.scrollz.css | 2 +- dist/jquery.scrollz.js | 10 ++++++++-- dist/jquery.scrollz.min.js | 4 ++-- jquery.scrollz.jquery.json | 2 +- src/jquery.scrollz.js | 8 +++++++- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/dist/jquery.scrollz.css b/dist/jquery.scrollz.css index 86f35ef..3cb60c5 100644 --- a/dist/jquery.scrollz.css +++ b/dist/jquery.scrollz.css @@ -1,4 +1,4 @@ -/*! jQuery Scrollz - v1.0.3 - 2013-02-24 +/*! jQuery Scrollz - v1.0.3 - 2013-02-28 * https://github.com/zippy1978/jquery.scrollz * Copyright (c) 2013 Gilles Grousset; Licensed MIT, GPL */ diff --git a/dist/jquery.scrollz.js b/dist/jquery.scrollz.js index 6f52c75..04e2ede 100644 --- a/dist/jquery.scrollz.js +++ b/dist/jquery.scrollz.js @@ -1,4 +1,4 @@ -/*! jQuery Scrollz - v1.0.3 - 2013-02-24 +/*! jQuery Scrollz - v1.0.3 - 2013-02-28 * https://github.com/zippy1978/jquery.scrollz * Copyright (c) 2013 Gilles Grousset; Licensed MIT, GPL */ @@ -135,7 +135,6 @@ // Add touch end listener container.bind(_getTouchEventName($this, 'touchend'), function(event) { // Prevent default behaviour - event.preventDefault(); // Handle _handleTouchEndEvent(event, $this); }); @@ -593,6 +592,13 @@ // Nothing to do : touch was already processed return; } + + // Only prevent the default event from + // happening when the user has actually + // scrolled + if (startTouchY !== lastTouchY) { + event.preventDefault(); + } var pullHeaderHeight = _getPullHeaderHeight(instance); diff --git a/dist/jquery.scrollz.min.js b/dist/jquery.scrollz.min.js index 20915f6..576f4c5 100644 --- a/dist/jquery.scrollz.min.js +++ b/dist/jquery.scrollz.min.js @@ -1,4 +1,4 @@ -/*! jQuery Scrollz - v1.0.3 - 2013-02-24 +/*! jQuery Scrollz - v1.0.3 - 2013-02-28 * https://github.com/zippy1978/jquery.scrollz * Copyright (c) 2013 Gilles Grousset; Licensed MIT, GPL */ -(function(a){function c(){return"ontouchstart"in document.documentElement}function d(a){var b=g(a,"contentWrapper"),c=g(a,"pullHeader");return c?c.outerHeight(!0):0}function e(a,b){var d=a.data("options");if(!c()&&d.emulateTouchEvents)switch(b){case"touchstart":return"mousedown";case"touchend":return"mouseup";case"touchmove":return"mousemove"}return b}function f(a,b,c){var d=a.data("markup");d||(d={},a.data("markup",d)),d[b]=c}function g(a,b){var c=a.data("markup");return c?c[b]:null}function h(a,b,c){var d=a.data("tracking");d||(d={},a.data("tracking",d)),d[b]=c}function i(a,b){var c=a.data("tracking");return c?c[b]:null}function j(a){h(a,"startTouchTime",null),h(a,"startTouchY",null),h(a,"previousTouchTime",null),h(a,"previousTouchY",null),h(a,"lastTouchTime",null),h(a,"lastTouchY",null)}function k(a){a.attr("unselectable","on").css({"-moz-user-select":"none","-webkit-user-select":"none","user-select":"none","-ms-user-select":"none"}).each(function(){this.onselectstart=function(){return!1}})}function l(a,b){var c=a.data("options"),e=d(a);return c.pull&&b'),h=a('
');h.css("height",e),h.css("overflow-x","hidden"),h.css("overflow-y","hidden"),c.styleClass&&h.addClass(c.styleClass),b.wrap(h).wrap(g),b.css("overflow-y","visible"),g=b.parent(),h=g.parent();var i=a('
');i.css("position","absolute"),h.prepend(i),i=h.find(".scrollz-thumb"),i.hide(),b.css("height","auto"),b.css("min-height",e),f(b,"contentWrapper",g),f(b,"container",h),f(b,"scrollThumb",i);if(c.pull){var j=a(c.pullHeaderHTML.initial);j.addClass("scrollz-pull-header").addClass("initial"),g.prepend(j),f(b,"pullHeader",g.children(".scrollz-pull-header"));var l=d(b);e=e.get(0).scrollHeight&&b.trigger("bottomreached"),c.pull&&(e.scrollTop()=i){var j=b.children().first(),k=b.children().last();j&&parseInt(j.css("marginTop"),10)>=0&&b.css("padding-top","1px"),k&&parseInt(k.css("marginBottom"),10)>=0&&b.css("padding-bottom","1px"),h.height(e.innerHeight()/f.outerHeight(!0)*(e.innerHeight()+i)-(h.outerHeight(!0)-h.outerHeight())),h.css("top",e.position().top+(e.scrollTop()-i)/f.outerHeight(!0)*e.innerHeight()),h.css("left",e.position().left+e.width()-h.outerWidth(!0))}else h.hide()}function w(a,b){var c=g(b,"container"),e=g(b,"scrollThumb");c.scrollTop()>d(b)&&(e.stop(!0,!0),e.fadeIn(500))}function x(a,b){var d=g(b,"scrollThumb");d.stop(!0,!0),d.delay(300).fadeOut(1e3);var e=i(b,"startTouchY");!c()&&!e&&p(b)}function y(a){return a.data("scrollzInitialized")!=null}var b={init:function(b){var c=a.extend({pull:!1,pullHeaderHTML:{initial:'
Pull to refresh
',release:'
Release to refresh
',waiting:'
Refreshing...
'},inertia:!0,emulateTouchEvents:!1},b);a.easing.easeOutCubic===undefined&&(a.easing.easeOutCubic=function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c});if(!a.event.special.scrollstart&&!a.event.special.scrollend){var d=a.event.special,f="D"+ +(new Date),i="D"+(+(new Date)+1);d.scrollstart={setup:function(){var b,c=function(c){var e=this,f=arguments;b?clearTimeout(b):(c.type="scrollstart",a.event.dispatch.apply(e,f)),b=setTimeout(function(){b=null},d.scrollstop.latency)};a(this).bind("scroll",c).data(f,c)},teardown:function(){a(this).unbind("scroll",a(this).data(f))}},d.scrollstop={latency:300,setup:function(){var b,c=function(c){var e=this,f=arguments;b&&clearTimeout(b),b=setTimeout(function(){b=null,c.type="scrollstop",a.event.dispatch.apply(e,f)},d.scrollstop.latency)};a(this).bind("scroll",c).data(i,c)},teardown:function(){a(this).unbind("scroll",a(this).data(i))}}}return this.each(function(){var b=a(this);if(!y(b)){b.data("options",c),m(b);var d=g(b,"container");h(b,"initialScrollPosition",d.scrollTop()),d.bind(e(b,"touchstart"),function(a){r(a,b)}),d.bind(e(b,"touchmove"),function(a){a.preventDefault(),s(a,b)}),d.bind(e(b,"touchend"),function(a){a.preventDefault(),t(a,b)}),a("*").not(d).bind(e(b,"touchend"),function(a){t(a,b)}),d.bind("mousewheel DOMMouseScroll",function(a){a.preventDefault(),u(a,b)}),d.scroll(function(a){v(a,b)}),d.bind("scrollstart",function(a){w(a,b)}),d.bind("scrollstop",function(a){x(a,b)}),b.data("scrollzInitialized",!0)}})},height:function(b){return this.each(function(){var c=a(this);if(y(c)){var d=c.data("options"),e=g(c,"container");e.height(b),c.css("min-height",e.css("height"))}})},hidePullHeader:function(b){return b=typeof b!="undefined"?b:!0,this.each(function(){var c=a(this);if(y(c)){var e=c.data("options"),f=g(c,"container");e.pull&&(b?f.animate({scrollTop:d(c)},"fast",function(){n(c,"initial")}):(f.scrollTop(d(c)),n(c,"initial")))}})}};a.fn.scrollz=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):typeof c=="object"||!c?b.init.apply(this,arguments):(a.error("Method "+c+" does not exist"),null)},a.mobile&&(a(document).on("pagecreate",":jqmData(role='page')",function(){a(":jqmData(scrollz='simple')").scrollz(),a(":jqmData(scrollz='pull')").scrollz({pull:!0,emulateTouchEvents:!0})}),a(document).on("pageshow",":jqmData(role='page')",function(){a(window).resize()}),a(window).bind("orientationchange",function(b){b.orientation==="landscape"&&a.mobile.silentScroll(0)}),a(window).resize(function(){var b=0;a(".ui-page-active div.ui-header").each(function(){b+=a(this).outerHeight()});var c=0;a(".ui-page-active div.ui-footer").each(function(){c+=a(this).outerHeight()});var d=(window.innerHeight?window.innerHeight:a(window).height())-(b?b:0)-(c?c:0);a(":jqmData(scrollz='simple'), :jqmData(scrollz='pull')").scrollz("height",d)}))})(jQuery); \ No newline at end of file +(function(a){function c(){return"ontouchstart"in document.documentElement}function d(a){var b=g(a,"contentWrapper"),c=g(a,"pullHeader");return c?c.outerHeight(!0):0}function e(a,b){var d=a.data("options");if(!c()&&d.emulateTouchEvents)switch(b){case"touchstart":return"mousedown";case"touchend":return"mouseup";case"touchmove":return"mousemove"}return b}function f(a,b,c){var d=a.data("markup");d||(d={},a.data("markup",d)),d[b]=c}function g(a,b){var c=a.data("markup");return c?c[b]:null}function h(a,b,c){var d=a.data("tracking");d||(d={},a.data("tracking",d)),d[b]=c}function i(a,b){var c=a.data("tracking");return c?c[b]:null}function j(a){h(a,"startTouchTime",null),h(a,"startTouchY",null),h(a,"previousTouchTime",null),h(a,"previousTouchY",null),h(a,"lastTouchTime",null),h(a,"lastTouchY",null)}function k(a){a.attr("unselectable","on").css({"-moz-user-select":"none","-webkit-user-select":"none","user-select":"none","-ms-user-select":"none"}).each(function(){this.onselectstart=function(){return!1}})}function l(a,b){var c=a.data("options"),e=d(a);return c.pull&&b'),h=a('
');h.css("height",e),h.css("overflow-x","hidden"),h.css("overflow-y","hidden"),c.styleClass&&h.addClass(c.styleClass),b.wrap(h).wrap(g),b.css("overflow-y","visible"),g=b.parent(),h=g.parent();var i=a('
');i.css("position","absolute"),h.prepend(i),i=h.find(".scrollz-thumb"),i.hide(),b.css("height","auto"),b.css("min-height",e),f(b,"contentWrapper",g),f(b,"container",h),f(b,"scrollThumb",i);if(c.pull){var j=a(c.pullHeaderHTML.initial);j.addClass("scrollz-pull-header").addClass("initial"),g.prepend(j),f(b,"pullHeader",g.children(".scrollz-pull-header"));var l=d(b);e=e.get(0).scrollHeight&&b.trigger("bottomreached"),c.pull&&(e.scrollTop()=i){var j=b.children().first(),k=b.children().last();j&&parseInt(j.css("marginTop"),10)>=0&&b.css("padding-top","1px"),k&&parseInt(k.css("marginBottom"),10)>=0&&b.css("padding-bottom","1px"),h.height(e.innerHeight()/f.outerHeight(!0)*(e.innerHeight()+i)-(h.outerHeight(!0)-h.outerHeight())),h.css("top",e.position().top+(e.scrollTop()-i)/f.outerHeight(!0)*e.innerHeight()),h.css("left",e.position().left+e.width()-h.outerWidth(!0))}else h.hide()}function w(a,b){var c=g(b,"container"),e=g(b,"scrollThumb");c.scrollTop()>d(b)&&(e.stop(!0,!0),e.fadeIn(500))}function x(a,b){var d=g(b,"scrollThumb");d.stop(!0,!0),d.delay(300).fadeOut(1e3);var e=i(b,"startTouchY");!c()&&!e&&p(b)}function y(a){return a.data("scrollzInitialized")!=null}var b={init:function(b){var c=a.extend({pull:!1,pullHeaderHTML:{initial:'
Pull to refresh
',release:'
Release to refresh
',waiting:'
Refreshing...
'},inertia:!0,emulateTouchEvents:!1},b);a.easing.easeOutCubic===undefined&&(a.easing.easeOutCubic=function(a,b,c,d,e){return d*((b=b/e-1)*b*b+1)+c});if(!a.event.special.scrollstart&&!a.event.special.scrollend){var d=a.event.special,f="D"+ +(new Date),i="D"+(+(new Date)+1);d.scrollstart={setup:function(){var b,c=function(c){var e=this,f=arguments;b?clearTimeout(b):(c.type="scrollstart",a.event.dispatch.apply(e,f)),b=setTimeout(function(){b=null},d.scrollstop.latency)};a(this).bind("scroll",c).data(f,c)},teardown:function(){a(this).unbind("scroll",a(this).data(f))}},d.scrollstop={latency:300,setup:function(){var b,c=function(c){var e=this,f=arguments;b&&clearTimeout(b),b=setTimeout(function(){b=null,c.type="scrollstop",a.event.dispatch.apply(e,f)},d.scrollstop.latency)};a(this).bind("scroll",c).data(i,c)},teardown:function(){a(this).unbind("scroll",a(this).data(i))}}}return this.each(function(){var b=a(this);if(!y(b)){b.data("options",c),m(b);var d=g(b,"container");h(b,"initialScrollPosition",d.scrollTop()),d.bind(e(b,"touchstart"),function(a){r(a,b)}),d.bind(e(b,"touchmove"),function(a){a.preventDefault(),s(a,b)}),d.bind(e(b,"touchend"),function(a){t(a,b)}),a("*").not(d).bind(e(b,"touchend"),function(a){t(a,b)}),d.bind("mousewheel DOMMouseScroll",function(a){a.preventDefault(),u(a,b)}),d.scroll(function(a){v(a,b)}),d.bind("scrollstart",function(a){w(a,b)}),d.bind("scrollstop",function(a){x(a,b)}),b.data("scrollzInitialized",!0)}})},height:function(b){return this.each(function(){var c=a(this);if(y(c)){var d=c.data("options"),e=g(c,"container");e.height(b),c.css("min-height",e.css("height"))}})},hidePullHeader:function(b){return b=typeof b!="undefined"?b:!0,this.each(function(){var c=a(this);if(y(c)){var e=c.data("options"),f=g(c,"container");e.pull&&(b?f.animate({scrollTop:d(c)},"fast",function(){n(c,"initial")}):(f.scrollTop(d(c)),n(c,"initial")))}})}};a.fn.scrollz=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):typeof c=="object"||!c?b.init.apply(this,arguments):(a.error("Method "+c+" does not exist"),null)},a.mobile&&(a(document).on("pagecreate",":jqmData(role='page')",function(){a(":jqmData(scrollz='simple')").scrollz(),a(":jqmData(scrollz='pull')").scrollz({pull:!0,emulateTouchEvents:!0})}),a(document).on("pageshow",":jqmData(role='page')",function(){a(window).resize()}),a(window).bind("orientationchange",function(b){b.orientation==="landscape"&&a.mobile.silentScroll(0)}),a(window).resize(function(){var b=0;a(".ui-page-active div.ui-header").each(function(){b+=a(this).outerHeight()});var c=0;a(".ui-page-active div.ui-footer").each(function(){c+=a(this).outerHeight()});var d=(window.innerHeight?window.innerHeight:a(window).height())-(b?b:0)-(c?c:0);a(":jqmData(scrollz='simple'), :jqmData(scrollz='pull')").scrollz("height",d)}))})(jQuery); \ No newline at end of file diff --git a/jquery.scrollz.jquery.json b/jquery.scrollz.jquery.json index 76da293..a7216c5 100644 --- a/jquery.scrollz.jquery.json +++ b/jquery.scrollz.jquery.json @@ -2,7 +2,7 @@ "name": "jquery.scrollz", "title": "jQuery Scrollz", "description": "Modern scrolling for jQuery and jQuery Mobile.", - "version": "1.0.3", + "version": "1.0.4", "homepage": "https://github.com/zippy1978/jquery.scrollz", "author": { "name": "Gilles Grousset", diff --git a/src/jquery.scrollz.js b/src/jquery.scrollz.js index 7c6b79a..a01746e 100644 --- a/src/jquery.scrollz.js +++ b/src/jquery.scrollz.js @@ -131,7 +131,6 @@ // Add touch end listener container.bind(_getTouchEventName($this, 'touchend'), function(event) { // Prevent default behaviour - event.preventDefault(); // Handle _handleTouchEndEvent(event, $this); }); @@ -589,6 +588,13 @@ // Nothing to do : touch was already processed return; } + + // Only prevent the default event from + // happening when the user has actually + // scrolled + if (startTouchY !== lastTouchY) { + event.preventDefault(); + } var pullHeaderHeight = _getPullHeaderHeight(instance);