2015-08-06 23 views
7

Sayfa document.ready() ile yüklendiğinde sayfanın üstüne doğru kaydırdığım bir işlev var. Ancak Chrome'da bu işlev sadece sayfada olduğumda çalışır ve yeniler.JQuery işlevi Safari'de değil de kromda çalışıyor

Bağlantıyı adres çubuğuna yazarak sayfaya erişirse, işlev çalışmaz. Sayfayı başka bir sayfadan bir bağlantıdan erişirse, o da çalışmaz. Chrome'da saatin% 100'ünü çalıştırmanın tek yolu, sayfamdaysa ve onu yenilemem.

Ancak, Safari'de, işlev, adres çubuğuna yeniden yazarak sayfaya bir bağlantıdan erişerek her seferinde% 100 çalışır.

jQuery(document).ready(function($) { 
    if (location.hash) {    // do the test straight away 
      window.scrollTo(0, 0);   // execute it straight away 
      setTimeout(function() { 
       window.scrollTo(0, 0);  // run it a bit later also for browser compatibility 
      }, 1); 
      //location.reload(); 
     } 
}); 

Bu aslında aynı zamanda document.ready() içinde koymadan Safari'de çalışıyor ama sonra tekrar değil Chrome'da:

Bu

benim kodudur.

Bunun nedenini bilen var mı, düzeltmek mümkün mü? Bu sorunu daha önce yaşadım ve çok sinir bozucu oldu.

+5

Sayfanın başına, doğrudan URL'ye yazarak, sayfanın başına giderken sayfanın başı nasıl olmaz? –

+1

Sanırım URL'de bir çapa (#) olabilir. –

+0

Tam olarak sorun nedir? Gördüğünüz davranışları veya fonksiyonun nasıl çalıştığını bilmediniz. – charlietfl

cevap

1

Yalnızca setTimeout gecikme süresini 20 ms veya daha fazla 20 ms sonra artırın, bunun nedeni 1 ms'nin çok kısa aralık olması olabilir.

$(document).ready(function() { 
if (location.hash) {   
      window.scrollTo(0, 0); 
      setTimeout(function() {window.scrollTo(0, 0);}, 20); 
} 
}); 
+0

En düşük ben gidebilirken çalışırken 200ms. Ancak (window) .load kullandığımda, çalışırken bile 115 ms'ye ulaşabilirim ama yine de 20ms yakınında yokum. 115 ms'den aşağıya iner inmez, her zaman çalışmayacağım ve 20 ms'ye ayarladığımda, sadece window.crollTo() işlevini yok sayar, ancak hala konsol günlükleri ve uyarıları tetikleyebilir. – Noob17

+0

Zaman aşımlarını sihir kullanarak "bu sayı çalışmasını sağlar" değerleri bir kod kokusu. Sorunu çözmek için kazmaya devam etmek daha iyi. Eğer kesinlikle bir sihir numarası olmadan çalışamazsanız, bir yorumun açık bir şekilde nedenini belgelediğinizden emin olun. – Palpatim

+0

Maalesef bu şekilde yapmaya çalışmayı bıraktım ve başka bir şekilde karar verdim, tamamen farklı tarayıcıda tutarlı olmayan setTimeOut() işlevini tamamen keserek insanlara yardım ettiğin için teşekkürler. – Noob17