2014-06-01 4 views
6

उदाहरण के लिए:कोणीयजेएस दृश्य को बदलने के बाद शीर्ष पर स्क्रॉल नहीं करता है

कोई उपयोगकर्ता ए को देखने के लिए नीचे स्क्रॉल करता है;

फिर उपयोगकर्ता एक लिंक पर क्लिक करता है, जो उपयोगकर्ता को बी देखने के लिए लेता है;

दृश्य परिवर्तन है, लेकिन उपयोगकर्ता का लंबवत स्थान वही रहता है, और स्क्रीन के शीर्ष पर मैन्युअल रूप से स्क्रॉल करना होगा।

क्या यह एक कोणीय बग है?

मैंने एक छोटा सा कामकाज लिखा जो शीर्ष पर स्क्रॉल करने के लिए jquery का उपयोग करता है; लेकिन मुझे इसे बाध्य करने के लिए सही घटना नहीं मिलती है।

संपादित टिप्पणी को देखने के बाद:

कैसे और कब मैं अपने आप शीर्ष करने के लिए खींच रहे हो? मैं jquery का उपयोग कर रहा हूं लेकिन $ viewContentLoaded ईवेंट बहुत जल्द है (विधि चलती है, लेकिन पृष्ठ उस समय स्क्रॉल नहीं करता है)

+0

शायद आप तय कर दी है ऊंचाई या कुछ और। व्यू कोणीय को बदलने से सामग्री को एनजी-व्यू से हटा दिया जाता है और इसे नई सामग्री से बदल दिया जाता है। एक पल के लिए ng-view की ऊंचाई == 0. इसलिए यदि आप पृष्ठ के निचले हिस्से में रहते हैं तो इसका अर्थ यह है कि पृष्ठ पर आपको शीर्ष पर वापस खींचने का कोई कारण नहीं है (कोई ऊंचाई परिवर्तन नहीं)। –

+0

आप अपने स्क्रॉलिंग कोड को '$ टाइमआउट' में 100 मिनट की तरह बहुत ही कम समय के साथ लपेट सकते हैं। –

उत्तर

1

ऐसा लगता है कि आप समझते हैं कि समस्या @ jarrodek की टिप्पणी के आधार पर क्यों हो रही है।

एक समाधान के लिए, आप या तो $timeout में अपने फ़ंक्शन को लपेटने के @ टोंगशेन के समाधान का पालन कर सकते हैं या आप फ़ंक्शन कॉल को आंशिक रूप से लोड कर सकते हैं जिसे आप लोड कर रहे हैं।

<!-- New partial--> 
<div ng-init="scrollToTop()"> 

</div> 

आप परिवर्तन देखते हैं, तो एक क्लिक घटना के बाद निकाल दिया जाता है, तो आप भी उस तत्व पर समारोह कॉल डाल सकता है। हालांकि समय के लिए बस नीचे आता है। बस इस बात पर निर्भर करता है कि चीजें कैसे स्थापित की जाती हैं।

8

नया दृश्य लोड करते समय कोणीय स्वचालित रूप से शीर्ष पर स्क्रॉल नहीं होता है, यह केवल वर्तमान स्क्रॉल स्थिति रखता है।

myApp.run(function($rootScope, $window) { 

    $rootScope.$on('$routeChangeSuccess', function() { 

    var interval = setInterval(function(){ 
     if (document.readyState == 'complete') { 
     $window.scrollTo(0, 0); 
     clearInterval(interval); 
     } 
    }, 200); 

    }); 
}); 

अपने बूटस्ट्रैप (आमतौर पर कहा जाता है app.js) में यह रखो:

यहाँ वैकल्पिक हल मैं का उपयोग करें।

यह एक शुद्ध जावास्क्रिप्ट समाधान है (यह आसान है अगर यह आसान है तो jQuery का उपयोग न करें)।

स्पष्टीकरण: यदि नया डोम पूरी तरह से लोड हो जाता है और फिर शीर्ष पर स्क्रॉल करता है और फिर जांच को रोकता है तो स्क्रिप्ट प्रत्येक 200ms की जांच करती है। मैंने इस 200ms लूप के बिना कोशिश की और कभी-कभी स्क्रॉल करने में विफल रहा क्योंकि पृष्ठ पूरी तरह से प्रदर्शित नहीं हुआ था।

+0

यह बहुत अच्छा दोस्त है, धन्यवाद :) – Will

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