From b685c948e0ae7f116ed059c2f87dfa3bb22e3a4b Mon Sep 17 00:00:00 2001 From: jlukic Date: Tue, 10 Mar 2015 14:48:37 -0400 Subject: [PATCH] Fix issue with destroy in visibility --- src/definitions/behaviors/visibility.js | 38 ++++++++++++++++--------- src/definitions/modules/sticky.js | 21 +++++++++----- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/definitions/behaviors/visibility.js b/src/definitions/behaviors/visibility.js index 80adf5583..b2528ef08 100644 --- a/src/definitions/behaviors/visibility.js +++ b/src/definitions/behaviors/visibility.js @@ -42,10 +42,11 @@ $.fn.visibility = function(parameters) { moduleNamespace = 'module-' + namespace, $window = $(window), + $module = $(this), $context = $(settings.context), - selector = $module.selector || '', + instance = $module.data(moduleNamespace), requestAnimationFrame = window.requestAnimationFrame @@ -75,13 +76,16 @@ $.fn.visibility = function(parameters) { if(settings.type == 'fixed') { module.setup.fixed(); } + if(settings.observeChanges) { + module.observeChanges(); + } + if( !module.is.visible() ) { + module.error(error.visible, $module); + } } if(settings.initialCheck) { module.checkVisibility(); } - if(settings.observeChanges) { - module.observeChanges(); - } module.instantiate(); }, @@ -98,9 +102,11 @@ $.fn.visibility = function(parameters) { if(observer) { observer.disconnect(); } - $window.off('load' + eventNamespace); - $window.off('resize' + eventNamespace); - $context.off('scrollchange' + eventNamespace); + $window + .off('load' + eventNamespace, module.event.load) + .off('resize' + eventNamespace, module.event.resize) + ; + $context.off('scrollchange' + eventNamespace, module.event.scrollchange); $module .off(eventNamespace) .removeData(moduleNamespace) @@ -128,8 +134,8 @@ $.fn.visibility = function(parameters) { events: function() { module.verbose('Binding visibility events to scroll and resize'); $window - .on('load' + eventNamespace, module.event.refresh) - .on('resize' + eventNamespace, module.event.refresh) + .on('load' + eventNamespace, module.event.load) + .on('resize' + eventNamespace, module.event.resize) ; // pub/sub pattern $context @@ -173,10 +179,13 @@ $.fn.visibility = function(parameters) { }, event: { - refresh: function() { + resize: function() { + requestAnimationFrame(module.refresh); + }, + load: function() { requestAnimationFrame(module.refresh); }, - // published event + // publishes scrollchange event on one scroll scroll: function() { if(settings.throttle) { clearTimeout(module.timer); @@ -190,7 +199,7 @@ $.fn.visibility = function(parameters) { }); } }, - // subscribed event + // subscribes to scrollchange scrollchange: function(event, scrollPosition) { module.checkVisibility(scrollPosition); }, @@ -225,7 +234,7 @@ $.fn.visibility = function(parameters) { should: { trackChanges: function() { - if(methodInvoked && queryArguments.length > 0) { + if(methodInvoked) { module.debug('One time query, no need to bind events'); return false; } @@ -1073,7 +1082,8 @@ $.fn.visibility.settings = { }, error : { - method : 'The method you called is not defined.' + method : 'The method you called is not defined.', + visible : 'Element is hidden, you must call refresh after element becomes visible' } }; diff --git a/src/definitions/modules/sticky.js b/src/definitions/modules/sticky.js index cccb752c9..da41c3022 100644 --- a/src/definitions/modules/sticky.js +++ b/src/definitions/modules/sticky.js @@ -87,14 +87,18 @@ $.fn.sticky = function(parameters) { }, destroy: function() { - module.verbose('Destroying previous module'); + module.verbose('Destroying previous instance'); module.reset(); if(observer) { observer.disconnect(); } - $window.off('load' + eventNamespace); - $window.off('resize' + eventNamespace); - $scroll.off('scrollchange' + eventNamespace); + $window + .off('load' + eventNamespace, module.event.load) + .off('resize' + eventNamespace, module.event.resize) + ; + $scroll + .off('scrollchange' + eventNamespace, module.event.scrollchange) + ; $module.removeData(moduleNamespace); }, @@ -149,8 +153,8 @@ $.fn.sticky = function(parameters) { bind: { events: function() { $window - .on('load' + eventNamespace, module.event.refresh) - .on('resize' + eventNamespace, module.event.refresh) + .on('load' + eventNamespace, module.event.load) + .on('resize' + eventNamespace, module.event.resize) ; // pub/sub pattern $scroll @@ -162,7 +166,10 @@ $.fn.sticky = function(parameters) { }, event: { - refresh: function() { + load: function() { + requestAnimationFrame(module.refresh); + }, + resize: function() { requestAnimationFrame(module.refresh); }, scroll: function() {