मुझे पता है कि इस सवाल का कुछ समय के लिए कहा गया था पहले, हालांकि, प्रदर्शन मुद्दा अभी भी मौजूद है रिलीज इस समय बनाता में अब भी नहीं है।)। नीचे एक वैकल्पिक समाधान है जो स्क्रोलिंग ईवेंट श्रोता पर भरोसा नहीं करता है। यह वेब ब्राउज़र के बीच आम स्क्रॉलिंग थ्रेड के कारण जंक और अंतराल को कम करता है, जब खिड़की स्क्रॉल होने की बजाय नियमित अंतराल पर सीएसएस को अद्यतन करता है। इसका मतलब है कि देव कंसोल चेतावनी प्रदर्शित नहीं होगी। मैं व्यक्तिगत रूप से चेतावनी के बारे में चिंतित नहीं होता या छोटी चीजों के लिए स्क्रॉलिंग घटनाओं का उपयोग नहीं करता जैसे गियर बदलना या सीएसएस वर्ग बदलना, हालांकि, यदि उपयोगकर्ता का अनुभव सीधे प्रभाव पर निर्भर करता है, तो यह पृष्ठ की उपयोगिता को नष्ट कर देगा।
var gear;
var lastPosition;
var refreshRate = 60; // fps; reduce for less overhead
var animation = "rotate(*deg)"; // css style to apply [Wildcard is *]
var link = 0.5; //what to multiply the scrollTop by
function replace(){
if(lastPosition != document.body.scrollTop){ // Prevents unnecessary recursion
lastPosition = document.body.scrollTop; // updates the last position to current
gear.style.transform = animation.replace("*", Math.round(lastPosition * link)); // applies new style to the gear
}
}
function setup(){
lastPosition = document.body.scrollTop;
gear = document.querySelector(".gear");
setInterval(replace, 1000/refreshRate); // 1000/60 = 16.666... Invokes function "replace" to update for each frame
}
window.addEventListener("DOMContentLoaded", setup);
एक कामकाजी उदाहरण on my GitHub का उपयोग किया जा सकता है। मैंने फ़ायरफ़ॉक्स, क्रोम और एज (काम) पर इसका परीक्षण किया है।
चेतावनी से बचने के लिए अन्य विकल्प css sticky elements का उपयोग करें या element.classList.add उपयोग करने के लिए कर रहे हैं() और element.classList.remove() तरीकों एक window.onscroll घटना के लिए limnked।
नोट: सीएसएस संक्रमणों का उपयोग करने के बारे में सावधान रहें, जहां संक्रमण की लंबाई अंतराल से अधिक लंबी होती है जिस पर सीएसएस शैली स्क्रिप्ट द्वारा अपडेट की जाएगी (जैसे स्क्रॉलिंग ईवेंट आधारित परिवर्तनों के साथ)। वेबकिट आधारित ब्राउज़र और एज HTML इस पर अप्रत्याशित तरीकों से व्यवहार करेंगे, आमतौर पर जब तक तत्व स्क्रिप्ट द्वारा अपडेट नहीं किया जाता है तब तक उनकी प्रारंभिक स्थिति में रहना होगा। जब तक कि आप जिस प्रभाव का इरादा रखते थे, उस स्थिति में, यह किसी भी तरह से फ़ायरफ़ॉक्स में काम नहीं करता है।
सर्वो Webrender, जब Firefox में एकीकृत एक हद तक इन समस्याओं का समाधान होगा (या कम से कम प्रदर्शन काफी काफी सुधार)। यद्यपि संगतता बनाए रखने के लिए अभी भी अन्य ब्राउज़र होंगे।
आप Nickolay धन्यवाद, जैसा कि आप कहते हैं कि पेज बहुत स्पष्ट नहीं है, लेकिन आप निश्चित रूप से मदद की है! –
@MichaelHancock: ध्यान दें कि MDN विकी है, इसलिए यदि आप कैसे लोग हैं, जो एक ब्राउज़र का निर्माण नहीं कर रहे हैं करने के लिए पेज स्पष्ट करने के लिए सुझाव है, वे बहुत स्वागत है। मुझे याद है कि उन्हें स्पैमर के साथ समस्याएं थीं, इसलिए एक नया खाता बनाना मुश्किल हो सकता है, लेकिन किसी भी मामले में यदि आप मदद करने में रूचि रखते हैं, तो कृपया [संपर्क में रहें] (https://developer.mozilla.org/en-US/docs/MDN/समुदाय/बातचीत)! – Nickolay