J'ai créé une position de module sur mon modèle où je charge un module personnalisé qui est une barre de menus.
avec le prochain script je change sa position en fixed
si quelqu'un fait défiler plus que 200px
pour que la barre soit toujours au top.
jQuery(window).scroll(function(e){
var jQueryel = jQuery('.fixedElement');
var isPositionFixed = (jQueryel.css('position') == 'fixed');
if (jQuery(this).scrollTop() > 200 && !isPositionFixed){
jQuery('.fixedElement').css({'position': 'fixed', 'top': '0px'});
jQuery('.fixedElement').addClass("bgNormal");
}
if (jQuery(this).scrollTop() < 200 && isPositionFixed)
{
jQuery('.fixedElement').css({'position': 'absolute', 'top': '0px'});
jQuery('.fixedElement').removeClass("bgNormal");
}
});
J'ai ajouté ce script dans la tête du modèle. Tout se passe bien dans toutes les pages, à l'exception du views
d'une personnalisation component
que j'ai créée.
La console ne génère aucune erreur et en inspectant le code source, je peux constater que le script est chargé correctement. Pour une raison quelconque, il ne fonctionnera tout simplement pas.
jQuery
est correctement chargé et je ne peux penser à rien qui puisse affecter la vue pour exécuter le fichier js.
J'ai téléchargé un autre component
et j'ai constaté qu'il ne lancerait pas le script non plus.
Est-ce un problème commun ? Dois-je faire quelque chose pour charger des scripts à partir d'un modèle à afficher? Ou c'est un problème de développement?
Ok, après beaucoup de recherches, j’ai découvert qu’il s’agissait principalement d’un problème de CSS.
$(window).scroll()
ne déclencherait pas car le #content div
recevait une règle aléatoire qui ne le laisserait pas overflow
.
Donc, $(window)
ne défilerait pas, quoi qu'il arrive.
Cela a fonctionné comme un charme!
Pour certains composants personnalisés, il a été nécessaire d'ajouter une fonctionnalité "wrapper" aux fichiers js dans les vues pour qu'ils fonctionnent correctement.
Étant donné que vous rencontrez uniquement des problèmes avec le script dans la section des composants personnalisés, le chargement des scripts par le composant peut être conflictuel, par opposition à la façon dont Joomla Core gère les scripts.
<script type="text/javascript">
(function ($) {
$(document).ready(function () {
$(window).scroll(function(e){
var jQueryel = jQuery('.fixedElement');
var isPositionFixed = (jQueryel.css('position') == 'fixed');
if ($(this).scrollTop() > 200 && !isPositionFixed){
$('.fixedElement').css({'position': 'fixed', 'top': '0px'});
$('.fixedElement').addClass("bgNormal");
}
if ($(this).scrollTop() < 200 && isPositionFixed)
{
$('.fixedElement').css({'position': 'absolute', 'top': '0px'});
$('.fixedElement').removeClass("bgNormal");
}
});
});
})(jQuery);
</script>