11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour tout le monde !

J’ai un problème avec une function de défilement photo que j’essaies actuellement de crée.Je crois que c’est un problème de structure, car il est fonctionnel mais après quelques cliques pour défilé les images, il fait littéralement ‘’bugger’’ mon navigateur.

Voici ce que j’ai de fait du coté Jquery :

(function( $ ){
 
 
    /* AUTRE FUNCTION … ****/
 
    /* Déroulement Photo ****/
    $.fn.photoScroll = function(options) {
 
var config = { leftArrow    : '#leftArrow',
           rightArrow   : '#rightArrow',
           photoSlider  : '#photoSlider',
               photoUL  : '#photoUL',
           scrollWidth  : 150,
           scrollSpeed  : 300 }
         
             
 
if (options){ $.extend(config, options); }
 
$(config.leftArrow).on({'click': function() {
 
    var pos = ($(config.photoSlider).scrollLeft())?(Math.round(($(config.photoSlider).scrollLeft()/config.scrollWidth))*config.scrollWidth):0;
                     $(config.photoSlider).stop(true,true).animate({scrollLeft [decu] pos - config.scrollWidth)+'px'}, config.scrollSpeed);
     }
 
});
 
$(config.rightArrow).on({'click': function() {
 
    var pos = ($(config.photoSlider).scrollLeft())?(Math.round(($(config.photoSlider).scrollLeft()/config.scrollWidth))*config.scrollWidth):0;
                                 
                 
$(config.photoSlider).stop().animate({scrollLeft: (pos+config.scrollWidth)+'px'}, config.scrollSpeed);
                         
                     }
         
});
}
})( jQuery ); 


Voici ce que ressemble mon code html (je vous épargne le CSS) :


<div id="photoToScroll" style="width:100%;">
  <div id="leftArrow">&nbsp;</div>
  <div id="rightArrow" style="  margin-right:0px;">&nbsp;</div>
  <div id="center">
    <div id= « photoSlider" >
      <ul class="photoUL" id="photoUL">
        <!—BEGIN-LOOP image -->
        <li >PHOTO</li>
        <!—END-LOOP image -->
      </ul>
    </div>
  </div>
</div>


Est-ce que je m’y prends de la bonne façon ? sinon, quel serait la meilleur façon ?

Merci d’avance
Bonjour,

Un plantage d'un navigateur peut être du à plusieurs facteurs, un boucle infini, un calcul lourd, un script pas optimisé (penses à mettre $(config.photoSlider) dans une variable quand tu l'appelle deux fois).

[attention théorie]
Je ne sais pas si l'utilisation du scrollLeft soit très pertinant, car il te donne le nombre de pixel caché de la vue, ce qui suppose la prise en compte de beaucoup de paramètre (le sens de tout les scrollbar et les positionnement parents etc)..
Un animate va faire plusieurs fois ce calcul pendant 300 millisecondes... c'est peut être ça qui est à l'origine du plantage ?
[fin théorie]

Si tu peux réessayer en t'appuyant sur une position absolute et une animation du top/left, ou bien en t'appuyant sur des transitions CSS aidées par du js pour les placements initiaux entre deux images, ou le must la deuxième solution avec un fallback sur la première pour une rétro compatibilité optimale.
Bonjour,

Premièrement merci de prendre le temps de m'aider!

Mais je dois avouer, je ne vois pas plus quoi essayé. De plus, malgré ta réponse très claire, j'ai essayer d'enlever tout le coté scrollLeft et animation et ça se mets a ramer comme habituellement.

Si possible pourrais-tu me donnée un bout de code qui a ton avis fonctionnerais? Je suis complètement perdu et depuis quelque jour ce problème me stop dans l'avancement de mon site.

Et pour ce qui est de fallback, je ne vois pas du tout de quoi tu parles... c'est la première fois qu'on me parle de cela.

merci
Mais avant, tout cela étais fonctionnel, mais le problème est venu lorsque j'ai essayer de la mettre en fonction. Avant c'était simplement ecris dans document ready avec un $('#leftarrow').click...

Crois-tu vraiment que je dois changer ma structure?

Et justement, c'est dans un div avec overflow hidden... et j'ai essayer de tout les facons, si vous pouvez me donnée un parti de code concrèt ce serait apprécier car j'y suis completement perdu et pourtant je crées des functions semblable assez souvent!

merci
Modifié par deuxk (14 Nov 2013 - 16:17)
Bonjour,


SI tu veux j'avais commencé y'a un bout de temps un slider pour m'amuser :
Lien ici (il est pas fini j'ai abondonné pendant que je faisait les thumbnail, j'ai peut être du à l'époque m'intéresser à quelque chose d'autre...)

Tu peux le prendre et regarder globalement le code pour voir comment cela fonctionne.

Personnellement, je trouve bien de s’entraîner avec les sliders car on aborde avec plusieurs notions, (structure de plugins + animation + gestion des options + gestion de plusieurs type d'animations etc...)

Mais en environnement de production il est diffcile de faire mieux que certains plugins bien travaillés tel que (codeSlider, Galleria.io etc...). A moins d'avoir des besoins bien spécifiques n'hésite pas à les utiliser Smiley cligne
Modifié par qualithras (16 Nov 2013 - 01:40)