bramki
Więc mam wykaz <div>
wszystko w jednym układzie kolumny, które mają zarówno klasę „aktywny” lub „nieaktywny”. Klasa aktywna pokazuje grafikę po prawej stronie elementu, a klasa nieaktywna - nie. Mam to ustawione tak, że naciśnięcie klawisza strzałki w górę lub w dół powoduje przeniesienie "aktywnej" klasy (i grafiki z nią) do poprzedniego lub następnego elementu. Nie jest animowany, ale możesz zobaczyć, jak grafika znika i pojawia się ponownie na tagu powyżej lub poniżej.JavaScript powoduje opóźnienie window.scroll asynchroniczny przerysować
Teraz chciałbym, aby strona przewijała strzałkę w dół, aby górna krawędź była zawsze w tym samym miejscu. Ponieważ lista elementów jest większa niż okno widoku, konieczne jest automatycznie przewijać przeglądarkę tak, że wybrana <div>
jest zawsze w środku ekranu ...
Kodeks
//Paging through items with arrow keys
theWindow.keydown(function (e) {
var key = e.keyCode,
oldItem = $('li.active')
if ((key === 40 && oldItem.next().length) || (key === 38 && oldItem.prev().length)) {
var theWindowMod = (window.innerHeight/2) + 43,
theHTML = $('html'),
theDetail = $('.detail')
theHTML.addClass('notransition')
if (key === 40 && oldItem.next().length) {
oldItem.removeClass('active').next().addClass('active')
} else if (key === 38 && oldItem.prev().length) {
oldItem.removeClass('active').prev().addClass('active')
}
var newItem = $('li.active')
window.scroll(0, newItem.offset().top - theWindowMod)
e.preventDefault()
$('.detail-inner.active').fadeOut(0).removeClass('active')
$('section.active, .tab.active').removeClass('active')
newItem.find('.tab').add(theDetail).addClass('active')
theDetail.find('.detail-' + newItem.attr('class').split(' ')[0]).addClass('active').fadeIn(0)
setTimeout(function() {
theHTML.removeClass('notransition')
}, 1)
}
});
Problem
Problem polega na tym, że we wszystkich wersjach Safari, ale nie w żadnej innej przeglądarce, metoda window.scroll jest nieco w tyle pod względem wydajności przełączania klas CSS. To, co się dzieje, kończy się dwoma różnymi przerysowanymi zdarzeniami i wygląda na to, że strona "glitchuje" podczas przewijania w dół, ponieważ możesz krótko zobaczyć grafikę po prawej stronie następnego elementu, zanim przeglądarka przewinie się w dół.
Live Demo
można zobaczyć go na żywo tutaj:
pomocą klawiszy strzałek do strony poprzez przedmioty. Zwróć uwagę na skok. Jak mam rozwiązać ten problem?
WebKit jest jedynym, który ma gradientu liniowego _i_ gradientem w hashtagly.css '.right-bg, .left-bg {... background-image: -webkit gradientem (.. "reszta korzysta tylko z liniowego gradientu (nie ma tu żadnego safari) ... dużo dup css w tym miejscu – technosaurus
Mam nadzieje, że to zostało odebrane, ale dzięki za głowy. Muszę schudnąć Kod Big Time – alt
Aby obejść ten problem obejrzyj animację przewijania stron lub w jakiś sposób używając animacji, – tiffon