iOS 7 - Safari'de geri ve ileri kaydırma işlevini devre dışı bırakmanın bir yolu var mı?


83

Bazı web sayfalarında menüleri açmak için iPhone'un sola ve sağa kaydırma işlevini kullanırız. Artık iOS7 ile, sola ve sağa kaydırma hareketlerinde tarayıcı geçmişinin önceki ve sonraki sayfalarına geri ve ileri gitme yeteneği getirdiler.

Ancak, kaydırma eylemlerinde çelişen davranışlar sergilememek için belirli sayfalarda devre dışı bırakmanın bir yolu var mı?


Ekranın dışından başlayan hızlıca kaydırılarak ayırt edilmelidir. Bir çatışmanın meydana geldiği örnek bir web sayfanız var mı?
Rupert Rawnsley

@RupertRawnsley Bir console.log ('ATEŞLENDİ!') İle web sayfanıza bir touchstart / touchmove olayı ekleyin; içinde. Parmağınızı kenardan web sayfasına hareket ettirin ve olayın asla ateşlenmediğini fark edeceksiniz. Bunun beklenen yeni davranış olacağını varsaymakta haklı mıyım?
Marcus

2
Bunun için +1. Bir menüyü açmak için kaydırdığınızda zahmetli.
TYRONEMICHAEL

2
+1 Kullanıcı, ekran üzerinde kaydırmaya kıyasla ekran dışı kaydırmanın ne olduğu hakkında hiçbir fikre sahip değil. Blergh!
Joseph Juhnke

1
Zayıf görüşe sahip bir kullanıcı olarak çok zum yapmam ve kaydırmam gerekiyor, bu geri kaydırma hareketi beni deli ediyor. Nasıl devre dışı bırakılacağını bilen varsa bilmek istiyorum.
Brett Ryan

Yanıtlar:



12

Doğrudan devre dışı bırakamazsınız, ancak yerel geri kaydırma işlemi yalnızca tarayıcı geçmişinde bir şey varsa gerçekleşir.

Her durumda çalışmaz, ancak yeni bir sekmede açılmış tek sayfalık bir web uygulamanız varsa, bunu kullanarak geçmişe eklenmesini engelleyebilirsiniz.

window.history.replaceState(null, null, "#" + url)

pushState veya yerine

document.location.hash = url

5
Evet, ancak bu, gezinirken yalnızca uygulamanın kendisindeki geçmişi engeller. Diğer uygulamalar da bir geçmişe sahip olabilir, bu nedenle iOS bu geçmişleri de algılayacaktır.
dostum

6

2 yaklaşım kullanmak zorunda kaldım:

1) Yalnızca CSS düzeltmesi Chrome / Firefox için

html, body {
    overscroll-behavior-x: none;
}

2) Safari için JavaScript düzeltmesi

if (window.safari) {
    history.pushState(null, null, location.href);
    window.onpopstate = function(event) {
        history.go(1);
    };
}

Safari, zamanla overscroll-behaviour-x'i uygulayacak ve JS hackini kaldırabileceğiz


Bunu ekledim ve Mac'te, sola kaydırmanın geri tetiklenmesini engelliyor. Ancak, geri işlevselliği tamamen bozar (Geri düğmesi dahil), bu nedenle geçici çözüm olarak kullanılamaz.
Šime Vidas

Benim durumumda tek sayfalık bir uygulama oluştururken hedef
John Doherty

2
Ancak, başka bir web sitesindeki bir bağlantıya tıklayarak (yani, söz konusu site uygulamanıza bağlanıyorsa) uygulamanızı açması yine de mümkündür. Bunu düzeltmek için, yine aracılığıyla tokatlamak hareketleri algılamak zorundayız touchmoveolaylar ve eğer sadece yukarıdaki kodu çalıştırmak değildi derhal bir tokatlamak öncesinde. Mümkün olmalı.
Šime Vidas

Bunu Chrome ve Firefox için yalnızca CSS seçeneğini içerecek şekilde güncelledim
John Doherty

Bunun iOS'ta çalıştığından emin misin? Kısa süre önce overscroll-behavior-x: none;iOS 13'te Chrome'da test ettim ve kaydırma gezinme davranışına hiçbir etkisi olmadı. Sol kenardan sağa kaydırma geriye gider (ve bu sekme geçmişindeki ilk sayfa olsa bile, yine de ana ekrana geri döner).
naktinis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.