la parallaxe défilement question - élément div secousses lors du défilement dans les navigateurs webkit
J'ai créé une parallaxe défilement, ce qui semble fonctionner correctement dans firefox, cependant dans le navigateur google chrome, il y a un petit saut sur le corps de texte lors du défilement. cliquez ici faites défiler jusqu'à la section à propos. Je ne suis pas sûr si ce est un css ou JS en question.. ci-dessous est un extrait de j'ai incorporé dans mon parallaxe fonction
Personne ne sait comment je résoudre ce problème?
$(document).ready(function(){
//Cache the Window object
$window = $(window);
//Cache the Y offset and the speed of each sprite
$('[data-type]').each(function() {
$(this).data('offsetY', parseInt($(this).attr('data-offsetY')));
$(this).data('Xposition', $(this).attr('data-Xposition'));
$(this).data('speed', $(this).attr('data-speed'));
});
//For each element that has a data-type attribute
$('[data-type="background"]').each(function(){
//Store some variables based on where we are
var $self = $(this),
offsetCoords = $self.offset(),
topOffset = offsetCoords.top;
//When the window is scrolled...
$(window).scroll(function() {
//If this section is in view
if ( ($window.scrollTop() + $window.height()) > (topOffset) &&
( (topOffset + $self.height()) > $window.scrollTop() ) ) {
//Scroll the background at var speed
//the yPos is a negative value because we're scrolling it UP!
var yPos = -($window.scrollTop() / $self.data('speed'));
//If this element has a Y offset then add it on
if ($self.data('offsetY')) {
yPos += $self.data('offsetY');
}
//Put together our final background position
var coords = '50% '+ yPos + 'px';
//Move the background
$self.css({ backgroundPosition: coords });
$('[data-type="scroll-text"]', $self).each(function() {
var $text= $(this);
var pos = ($window.scrollTop()/10) * $text.data('speed');
var curP = $text.css('margin-top');
var is_chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
if(is_chrome) {
$text.animate({
paddingTop: pos,
}, 200, 'linear', function() {
//Animation complete.
});
} else {
$text.css('padding-top', pos);
}
});
}; //in view
}); //window scroll
}); //each data-type
}); //document ready
- Votre code devrait bénéficier de simples optimisations: 1) Appel
$(window).scrollTop()
juste une fois et le cache de la valeur, 2) la Requête de DOM pour la[data-text]
éléments à l'extérieur de l'écouteur d'événement. - pouvez-vous élaborer sur ce abit, ou même modifier le JS sur github. Je ne suis pas le plus à Javascript
- pastebin.com/JCaA7T6A
- avec ce script, j'obtiens le message d'erreur suivant..."Uncaught ReferenceError: $self n'est pas défini"
- Vous avez besoin d'avoir le
$self
une variable définie à l'avant de la partie du code que j'ai modifié. Pense un peu. - Yup fait qui n'a toujours pas résolu le problème
- Chose amusante: sur un non maximisée à la fenêtre de Firefox, je peux obtenir ce pour faire défiler pour toujours.
- je ne comprends pas très bien ce que tu veux dire
Vous devez vous connecter pour publier un commentaire.
Quelques suggestions:
1.) Utilisation
position: fixed
pour éviter tout scintillement, que vous serez en prise de l'élément de la circulation des documents. Vous pouvez alors le placer à l'aide de z-index.2.) Cache autant que vous pouvez pour faciliter les temps de traitement.
3.) Les mathématiques.rond peut ne pas être nécessaire, mais essayez d'ajouter cette CSS pour votre déménagement domaines:
-webkit-transform: translate3d(0,0,0);
Ce sera la force de l'accélération matérielle dans Chrome, ce qui peut soulager une partie de la dispersion. (Il semblait plus lisse sur mon écran quand j'ai ajouté ce avec l'Inspecteur, mais il n'a pas à se débarrasser de la nervosité avec la molette de défilement.) Note: à ne pas faire sur l'ensemble de votre document (par exemple, le corps de la balise), car il pourrait causer des problèmes avec votre configuration actuelle. (Votre barre de navigation ne colle pas à la partie supérieure de la fenêtre, par exemple.)4.) Si vous avez des animations en cours d'exécution dans le cadre de votre parallaxe de la logique (de l'interpolation de la marge en place ou quelque chose le long de ces lignes), retirez - ce serait sans doute la cause du saut de vous voir.
Espère que cette aide. Le meilleur de la chance.
-webkit-transform: translate3d(0,0,0);
pour le mouvement des éléments résolu mon problème.Je vois la même dérive dans FireFox et Chrome (Mac). En regardant vos contenants, une chose qui est flagrante à moi, c'est la position d'un pixel qui est calculée/utilisé.
Navigateurs ne vont pas permettre de s'asseoir à 1/2 pixel, sans parler de 0.3999999 d'un pixel. Je pense qu'il est en mouvement, et en essayant de calculer si le à tour ou un tour vers le bas. Il frousse parce que c'est le calcul à chaque clic de la molette de votre souris.
Donc, j'aimerais essayer d'ajouter des Mathématiques.round() pour vos positions, de sorte que les conteneurs ne sont jamais laissés dans les limbes.
Prendre un coup d'oeil au code ici: http://webdesigntutsplus.s3.amazonaws.com/tuts/338_parallax/src/index.html
Firebug certains éléments, et vous verrez que leur seule fraction de pixel est '0.5'. La plupart d'entre eux (le gros) allez à la ronde certain nombre de valeurs.
Vous allez avoir à changer la façon dont le défilement fonctionne (c'est à dire changer la façon dont l'espacement est calculé), mais cela peut être corrigé par l'ajout de la
position:fixed
CSS de l'élément de la page, les éléments qui sont le défilement. Le problème vient du temps qu'il faut pour le JavaScript pour le processus et rendre ensuite.Par exemple, sur votre page, vous définissez chacun des
<div>
balises contenant du texte, d'avoir une position fixe et ensuite utiliser le JavaScript/JQuery fonction de mise à jour de latop:
CSS de l'élément. Cela devrait rendre la page de défilement en douceur.Avez-vous essayé d'ajouter le preventdefault à l'intérieur de la fonction de défilement?
Dans une précédente question, j'ai créé une assez bonne parallaxe défilement de la mise en œuvre. Jquery effet de Défilement Parallaxe - Multi directionnel Vous trouverez peut-être utile.
Voici le JSFiddle http://jsfiddle.net/9R4hZ/40/ utiliser les flèches haut/bas ou la molette de défilement.
À l'aide de rembourrage et de la marge pour le positionnement sont probablement la raison pour laquelle vous rencontrez des problèmes de rendu. Alors que mon code utilise de défilement ou le clavier d'entrée de l'effet que vous pouvez lire en boucle la ème partie et vérifier l' $déplacement variable jusqu'à atteindre l'élément souhaité sur l'écran.
Ne peuvent être liés à votre question, mais j'ai eu un jumpy de parallaxe défilement problème, j'ai été en mesure de le résoudre en ajoutant le code CSS suivant pour le fixe des parties de la page:
Pas sûr de tous les détails, mais a trouvé à Suppléant Fixe & faire Défiler les Milieux