2013-09-04 7 views
10

क्या व्यवहार को अक्षम करने का कोई तरीका है जहां कुछ आधुनिक ब्राउज़रों (क्रोम और सफारी) को पृष्ठ पर रीफ्रेश पर आपकी स्क्रॉल स्थिति याद है?पेज रीफ्रेश करने के बाद ब्रॉवर के ऑटो स्क्रॉल को अक्षम करें?

+0

क्यों आपको लगता है कि क्या करना चाहते हैं? यह उस स्थिति पर वापस जाने के लिए अच्छा उपयोगकर्ता अनुभव है। – putvande

+0

@putvande अधिकांश मामलों में 100% सहमत हैं, लेकिन एक उपयोग केस तब होगा जब डेटा की बड़ी तालिका शीर्ष पर नई डेटा जोड़ती है, और हालांकि यदि उपयोगकर्ता किसी भी कारण से रीफ्रेश करता है, तो हम डेटा को गतिशील रूप से अपडेट कर सकते हैं, हम नहीं करते हैं उन्हें वापस अपनी पुरानी स्क्रॉल स्थिति में नहीं ले जाना चाहते हैं। यह इस अनुभव को देखते हुए उनके परिप्रेक्ष्य से अपेक्षित व्यवहार नहीं है - यह भी केवल 1 उपयोग का मामला है, ऐसे कुछ भी मौजूद हैं जो मौजूद हैं। – Anthony

+1

कोई भी पृष्ठ जो लोडिंग अनुभव के लिए अनंत स्क्रॉल का उपयोग करता है, इसमें यह (अप्रत्याशित) समस्या होगी। –

उत्तर

17

ब्राउज़रों कि history.scrollRestoration समर्थन के लिए, ऑटो स्क्रॉल व्यवहार बंद किया जा सकता:

if ('scrollRestoration' in history) { 
    history.scrollRestoration = 'manual'; 
} 

स्रोत: https://developers.google.com/web/updates/2015/09/history-api-scroll-restoration

+0

चूंकि यह अभी भी एक प्रयोगात्मक संपत्ति है, क्या किसी को ब्राउज़र समर्थन पता है? –

1

सिर्फ क्रोम के लिए नहीं, लेकिन सभी के लिए मुझे लगता है कि यह अच्छी तरह से काम करेगा।

window.onload = function() { 
    window.scrollTo(0, 0); 
}; 

अपने प्रश्न का अद्यतन करने के बाद:

मैं इसके बेहतर अगर हम कुछ कुकीज़ या सत्र संग्रहण का उपयोग लगता है।

+5

यह मेरा विचार भी था - लेकिन मुझे इस तरह के कॉलबैक के साथ कोई भाग्य नहीं है - ऐसा लगता है जैसे क्रोम ऑनलोड आग के बाद ऑटो-स्क्रॉल करता है। – Anthony

3

क्या आपने दस्तावेज़ तैयार होने के बाद इसे फायर करने का प्रयास किया है?

$(document).ready(function(){ 
    window.scrollTo(0, 0); 
}); 

है कि अगर काम नहीं करता है ...

$(document).ready(function(){ 
    setTimeout(function(){ 
     window.scrollTo(0, 0); 
    }, 1); 
}); 

जो एक setTimout उम्मीद की

0

इसके बजाय कॉल ढेर के नीचे करने के लिए इस धक्का होगा ढेर के नीचे समाप्त होता है - मैं इसे लागू करता हूं कि हम उस स्क्रॉल स्थिति को हिट करते हैं जिसे हम चाहते हैं। मैं अभी भी यह एक हैक मानता हूं, मैं किसी प्रकार की ब्राउज़र घटना की उम्मीद कर रहा था जिसे हम बांधते हैं।

var scrollToYPos = 100; 
var interval = setInterval(checkPos, 0); 

function checkPos() { 
    if ($(window).scrollTop() == scrollToYPos) { 
     clearInterval(interval); 
    } else { 
     window.scrollTo(0, scrollToYPos); 
     checkPos();    
    } 
}  
0

मुझे इस समस्या का सामना करना पड़ा। यहाँ बुनियादी समाधान मैं के साथ आया है:

 // scroll the user to the comments section if we need to 
     wt = win.scrollTop(); 
     wb = wt + win.height(); 
     // if scroll position is 0, do this (it's a fresh user), otherwise 
     // the browser is likely to resume the user's scroll position, in 
     // which case we don't want to do this 
     yab.loaded().done(function() { 
     // it seems that browsers (consistently) set the scroll position after 
     // page load. Accordingly wait a 1/4 second (I haven't tested this to the lowest 
     // possible timeout) before triggering our logic 
     setTimeout(function() { 
      // if the window top is 0, scroll the user, otherwise the browser restored 
      // the users scroll position (I realize this fails if the users scroll position was 0) 
      if(wt === 0) { 
      p = self.container.offset().top; 
      if(wb != p) { 
       win.scrollTop(p - th - 20);   
      } 
      }    
     }, 250); 
     }); 
+0

ओह और 'yab.loaded' एक वादा है जिसे खिड़की लोड होने के बाद हल किया जाता है। '$ (विंडो) .load (function() {// ...}) के बराबर;' – Skone

-3

मुझे लगता है कि सबसे आसान तरीका है एक रीलोड यह सोचता है कि एक नया पृष्ठ है में ब्राउज़र चाल करने के लिए किया जाएगा।

window.location = window.location 

मेरे द्वारा परीक्षण किए गए सभी ब्राउज़रों में लगातार काम करता है। मैं व्यक्तिगत रूप से ऑनलोड कॉलबैक से दूर रहूंगा क्योंकि वे लोड के दौरान कूद सकते हैं जो बहुत ही आकर्षक नहीं हैं।

संबंधित मुद्दे