Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131

    [jquery] jcarousel e classe che se ne va

    Scusate ma sto letteralmente impazzendo...
    Sto usando un plugin jquery , (jcarousel , che mi permette di scorrere le immagini di una galleria in orizzontale impostando un bel pò di cosine.
    Per ingrandire le immagine dapprima usavo Lightbox,plugin prototype;poi visto che nella pagina uso anche un altro plugin jquery,per evitare conflitti vari , ho preferito ricorrere a Thickbox.
    Perfetto, jcarousel era ricco di esempi che già lo integravano ,purtroppo relativi solamente a gallerie statiche, le cui immagini cioè venivano caricate al caricamento della pagina.
    Avendo oltre 100 immagini da mostrare, sono dovuto partire dall'esempio dell'autore per caricare con Ajax le immagini.
    Questo sistema carica via javascript dinamicamente il menu[*] con le varie immagini attraverso una funzione che ho modificato aggiungendo il tag per l'apertura delle stesse con thickbox
    Codice PHP:
    function jcarousel_getItemHTML(item)
    {

        return 
    '[url="' img.jpg '"][img]'img.jpg[/img][/url]';
    }; 
    Purtroppo così facendo non funzionava nulla;la classe thickbox in pratica viene ignorata.
    Dopo mille ricerche e tentative, ho notato che richiamando la funzione principale di thickbox ( tb_init('a.thickbox') ) nelle varie funzioni principale di jcarousel , la classe viene finalmente considerata, in un modo purtroppo tutt'altro che normale;per esempio, a volte mi si apre in tichbox la stessa immagine due volte, altre volte mi compare in sottofondo all'immagine già caricata il preloader dello script stesso.

    So che un messaggio così lungo ha scarsisse possibilità di risposta ed inoltre la faccenda che ho solo riassunto richiede quantomeno d'aver usato lo stesso script allo stesso scopo;se fosse il caso, sono pronto anche ad un compenso ,sperando non vada contro il regolamento proporlo qui, per chi mi potrà aiutare o a risolvere questo problema, o ha realizzare in altro modo lo stesso effetto.

    Vi prego...
    under costrussion

  2. #2
    Non uso jquery, ma se tale oggetto si inizializza pescando tutti gli <a> con classe thickbox allora il comportamento che descrivi tu è normale.

    Dando una veloce occhiata al codice di thickbox credo che tu debba rimuovere tutte le funzioni dall'evento onclick degli anchor con classe thickbox (sicuramente jquery mette a disposizione metodi per farlo con poche righe di codice), e successivamente rilanciare tb_init('a.thickbox').

  3. #3
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    Premesso che di Javascript ne so ben poco, sempre cercando in Rete ho trovato qualcuno che ha modificato la funzione principale di thickbox così:
    Codice PHP:
    function tb_init(domChunk){
        $(
    domChunk).click(function(){
        var 
    this.title || this.name || null;
        var 
    this.href || this.alt;
        var 
    this.rel || false;
        
    tb_show(t,a,g);
        
    this.blur();
    $(
    domChunk).removeClass('thickbox'); // linea aggiunta per rimuovere la classe

        
    return false;
        });

    La funzione che richiama tb_init è nella funzione che carica gli items da mostrare
    Codice PHP:
    function jcarousel_itemLoadCallback(carouselstate)
    {
        
    // Fetch the visible range first (should be already preloaded)
        
    jcarousel_itemFetchCallback(carouselcarousel.firstcarousel.last);

        var 
    visible carousel.last carousel.first 1;

        
    // ---

        
    var first carousel.last 1;
        var 
    last  first visible 1;

        var 
    first2 last 1;
        var 
    last2  first2 visible 1;

        
    jcarousel_itemFetchCallback(carouselfirstlastfirst2last2);

        
    // ---

        
    var last  carousel.first 1;
        var 
    first last visible 1;

        var 
    last2  first 1;
        var 
    first2 last2 visible 1;
     
    // Apply thickbox
    tb_init('a.thickbox');

    imgLoader = new Image();// preload image
        
    imgLoader.src tb_pathToImage;

        
    jcarousel_itemFetchCallback(carouselfirstlastfirst2last2);
    }; 
    Senza aggiungere la linea commentata in tb_init() ,thickbox viene applicato regolarmente fino a quando ,scorrendo le varie immagini, non torno indietro su un'immagine già vista;in questo caso thickbox viene applicato tante volte quante sono le volte che l'immagine è stata 'ricaricata' in ajax.
    Aggiungendo la linea,invece, thickbox viene applicato 'spesso', ma non sempre...
    under costrussion

  4. #4
    [QUOTE]Originariamente inviato da marmo79

    Codice PHP:
    function tb_init(domChunk){
    ...
    $(
    domChunk).removeClass('thickbox'); // linea aggiunta per rimuovere la classe

    ...

    Non ci avevo pensato: rimuovere la classe e impedire che venga reinizializzato su un elemento che già ne possiede metodi e proprietà è ancora più ottimizzata come soluzione.

    Ma con questa soluzione ti funziona oppure no?

  5. #5
    Utente di HTML.it L'avatar di marmo79
    Registrato dal
    Dec 2000
    Messaggi
    131
    No,con questa funzione a volte carica il tutto normalmente, a volte cancella proprio la classe thickbox.

    Ho invece risolto qualcosa modificando una riga nella funzione che ,in thickbox, si occupa di visualizzare la sua finestra
    Codice PHP:
    $("#TB_window").empty().append("[url=''][img]"+url+"[/img][/url]" "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" TB_imageCount TB_PrevHTML TB_NextHTML "</div></div><div id='TB_closeWindow'>[url='#']close[/url] or Esc Key</div>"); 
    In pratica viene aggiunto empty(). prima di append().
    Finalmente, tranne per il preloader che cmq compare in background (risolverò eliminando qualsiasi richiamo e amen) il ocntenuto non è caricato due volte; peccato che in Explorer 7 ,quando chiudo la finestra in thickbox, il contenuto di jcarousel impazzisce facendomi scomparire le immagini....(con firefox tutto ok...)
    under costrussion

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.