La fonction jQuery semble quitter lorsque différentes fonctions jQuery sont appelées

J’ai écrit ma propre fonction qui garde une barre latérale fixe à l’écran après un certain sharepoint défilement, puis la ramène à sa position relative lors du défilement vers le haut. Si la fenêtre est redimensionnée à une taille inférieure à la hauteur de la barre latérale, elle revient également à sa position relative normale. Fonctionne très bien!

Le problème est que lorsque je lance une autre fonction, à savoir fancybox (), sur la vignette panoramique dans le corps de la page, et que j’essaie de faire défiler la page, ma fonction originale de “correction du défilement” semble cesser de fonctionner.

Quelqu’un sait pourquoi c’est?

//////////////////////
Page de démonstration
//////////////////////

//////////////////////////////////////////
Fonction “Scroll-Fix”

$(document).ready(function(){ var element = $("#sidebar"); var window_height = $(window).height(); var element_height = element.height(); $(window).ready(function() { if (window_height > element_height) { if (($(document).scrollTop() + element.height()) > ($(document).height() - $("#footer").height() - 9)) { element.css("position","absolute"); element.css("top", "auto"); element.css("bottom","-60px"); } else if ($(document).scrollTop() > 220) { element.css("position","fixed"); element.css("top","9px"); element.css("padding-top","0"); element.css("bottom","auto"); } else { element.css("position","relative"); element.css("top","auto"); element.css("padding-top","57px"); element.css("bottom","auto"); } } else { element.css("position","relative"); element.css("top","auto"); element.css("padding-top","57px"); element.css("bottom","auto"); } }); $(window).scroll(function() { if (window_height > element_height) { if (($(document).scrollTop() + element.height()) > ($(document).height() - $("#footer").height() - 9)) { element.css("position","absolute"); element.css("top", "auto"); element.css("bottom","-60px"); } else if ($(document).scrollTop() > 220) { element.css("position","fixed"); element.css("top","9px"); element.css("padding-top","0"); element.css("bottom","auto"); } else { element.css("position","relative"); element.css("top","auto"); element.css("padding-top","57px"); element.css("bottom","auto"); } } else { element.css("position","relative"); element.css("top","auto"); element.css("padding-top","57px"); element.css("bottom","auto"); } }); $(window).resize(function(){ window_height = $(window).height(); if (window_height > element_height) { if (($(document).scrollTop() + element.height()) > ($(document).height() - $("#footer").height() - 9)) { element.css("position","absolute"); element.css("top", "auto"); element.css("bottom","-60px"); } else if ($(document).scrollTop() > 220) { element.css("position","fixed"); element.css("top","9px"); element.css("padding-top","0"); element.css("bottom","auto"); } else { element.css("position","relative"); element.css("top","auto"); element.css("padding-top","57px"); element.css("bottom","auto"); } } else { element.css("position","relative"); element.css("top","auto"); element.css("padding-top","57px"); element.css("bottom","auto"); } }); }); 

premiers changements pour ce code pour ne pas générer les mêmes problèmes

 (function($) { $.fn.myScrollFix = function(options) { options = $.extend({ footer: "footer", pthis: this, doc: $(document), win: $(window) }, options || {}); options.footer = $(options.footer); options.accion = function() { var element = options.pthis, doc_scroll_top = options.doc.scrollTop(), doc_height = options.doc.height(), window_height = options.win.height(), element_height = options.pthis.height(), footer_height = options.footer.height(); if (window_height > element_height) { if ((doc_scroll_top + element_height) > (doc_height - footer_height - 9)) { element .css("position","absolute") .css("top", "auto") .css("bottom","-60px"); } else if (doc_scroll_top > 220) { element .css("position","fixed") .css("top","9px") .css("padding-top","0") .css("bottom","auto"); } else { element .css("position","relative") .css("top","auto") .css("padding-top","57px") .css("bottom","auto"); } } else { element .css("position","relative") .css("top","auto") .css("padding-top","57px") .css("bottom","auto"); } }; $(window).bind("scroll", options.accion); $(window).bind("resize", options.accion); options.accion(); }; })(jQuery); $(document).ready(function(){ $("#sidebar").myScrollFix(); }); 

alors vous pouvez modifier ces lignes dans FancyBox

ligne 432

 $(window).unbind("resize scroll", $.fn.fancybox.scrollBox); 

ligne 439

 $(window).unbind("resize scroll", $.fn.fancybox.scrollBox); 

J’ai eu un problème très similaire et j’ai essayé de le commenter et cela a fonctionné, mais après cela, j’ai essayé une autre solution qui fonctionnait aussi. Fondamentalement, je ciblais l’élément réel pour lequel le parchemin étroit était nécessaire, mais dans mon cas, c’était joliPhoto

 $(window).unbind('scroll', $.prettyPhoto.close); 

La partie audacieuse , $ .prettyPhoto.close est ce que j’ai ajouté.

J’espère que cela aidera tous ceux qui ont rencontré ce problème de fermeture du parchemin avec prettyPhoto.

Problème résolu.

Il se trouve que FancyBox.js a une ligne qui dit en gros, quand vous fermez la boîte fantaisie …

 if (opts.centerOnScroll) { $(window).unbind("resize scroll"); } 

La suppression de la liaison de la fenêtre entraîne également la suppression de la liaison de ma solution de correction de défilement.

Un simple commentaire de cette ligne (qui se produit deux fois dans cette fonction de fermeture de fancybox) résout ce problème.

 if (opts.centerOnScroll) { // $(window).unbind("resize scroll"); }