2014-07-17 17 views
8

Ho impostato la posizione della mia unità eroe dopo averlo fatto scorrere verso il basso. Quindi per il primo 70px della pagina l'unità dell'eroe scorre insieme al resto finché la cima raggiunge l'unità dell'eroe, che quindi deve essere riparata.Scorrimento iPad - l'intestazione è impostata su Fisso solo quando lo scorrimento termina

non fisso

enter image description here

fisso

enter image description here

Questo funziona bene ovunque e anche l'iPad, tranne che la posizione è impostato su fisso quando il rotolo è finito invece che durante lo scorrimento come il browser.

Lo so perché l'evento di scorrimento non viene attivato durante lo scorrimento del momento. Ho cercato di risolvere questo problema utilizzando il seguente codice, ma non ha funzionato:

document.addEventListener("touchstart", function(){ 
    $('body').prepend('<p>touch start</p>'); 
    that.tid = setInterval(function(){ 
     $.event.trigger(
     { type: "touchcontinuem" } 
     ); 
    },10) 
}, false); 

document.addEventListener("touchend", function(){ 
    $('body').prepend('<p>touch end</p>'); clearTimeout(that.tid); 
}, false); 

$(document).on("touchcontinuem", function(){ 
    $('body').prepend('<p>touch continuem</p>'); 
}); 

Quello che voglio ottenere è che l'eroe-unità può essere impostata a fisso, mentre il rotolo è ancora occupato. Se qualcuno può suggerire un miglioramento o un'alternativa apprezzerei molto perché sono bloccato in questo momento.

+0

Mi può fornire un violino per questo ... lemme provatelo .. – PraJen

+0

Ci sono i browser per l'IPAD, a quale si sta riferendo ??hai provato con un altro browser su IPAD ??? – Tasos

+1

Credo che questo sia il modo in cui funziona, ma per favore nota che questo succede solo il primo movimento di scorrimento. il resto, viene corretto. non penso che ci sia una soluzione per questo ... forse nelle versioni future di IOS? –

risposta

6

uso position: sticky; sull'elemento eroe https://developer.mozilla.org/en-US/docs/Web/CSS/position#Sticky_positioning

can i use

mentre questo da solo farà il trucco in Safari, sarà ancora bisogno di scorrere la gestione per i browser che non supportano il posizionamento appiccicoso.

+0

A seconda di cosa ha bisogno, questa potrebbe essere una buona soluzione. Il supporto per questo è terribile però. –

+1

Questa è la soluzione, perché Apple non consente i browser per iOS nell'App Store a meno che non siano basati su WebKit. E WebKit è il motore di Safari che supporta 'position: sticky;'. Assicurati che lo stile sia applicato solo su iPad. – Julian

0

Come indicato da toni, ci sono problemi su touchstart/evento che si attivano solo dopo la fine della pergamena. Si può cercare di utilizzare l'offset dalla parte superiore della pagina dell'elemento all'interno di un

$(window).on("scroll", function() { 
    If ($(element).offset().top < 70) 
     Do thigs 
    Else 
     Do other 
}) 

per controllare dove il vostro elemento è in relazione alla parte superiore della pagina

+0

Sto già usando questo codice. funziona perfettamente sul desktop ma non sull'iPad. L'evento non verrà attivato durante lo scorrimento, quindi non importa se utilizzo offset o no – Christophe

2

Questo è stato un grosso problema per io in passato Esistono alcune soluzioni alternative che funzionano, ma in genere rompono l'esperienza per altri browser/dispositivi.

This tipo di lavoro su iOS safari, ma smetterà di funzionare su Desktop e molti altri browser mobili.

var count = 0; 

document.addEventListener("touchmove", function(){ 
    var data = document.getElementById('data'); 
    data.innerHTML = count++; 
}); 

C'è A great article here che mette in evidenza i pro ei contro di 3 o 4 diversi modi di aggirare per questo problema. Ma, purtroppo, nessuna vera conclusione.

TL; DR - No, non c'è una soluzione solida per questo, ma ci sono soluzioni alternative che possono aiutare.

+0

È un vero peccato. sembra quasi che io stia cercando di far funzionare qualcosa nel vecchio IE ... :) comunque proveremo a farlo. Sarò in grado di eseguire questa operazione solo per dispositivi iPad o touch, in modo da non interferire con il comportamento del desktop. – Christophe

0

Supponendo che il vostro eroe-unità ha id="hero-unit", allora si può cambiare la sua posizione ad fissato con un ascoltatore che controlla la sua distanza dalla parte superiore dello schermo, in questo modo:

var el = document.getElementById('hero-unit'); 

document.addEventListener('touchmove', function() { 
    var distance = el.getBoundingClientRect().top; 

    if (distance <= 0) el.style.position = 'fixed'; // Attach it to the top 
    else el.style.position = 'some other value'; // Dethatch it from the top 

}, false); 
Problemi correlati