आपकी समस्या यह प्रतीत होती है कि आप केवल उन तत्वों का पृष्ठभूमि रंग बदलते हैं जो को पहले से ही में स्क्रॉल किया गया है। आपका कोड अपेक्षा करता है कि ब्राउजर अपने कोड को स्क्रॉल ईवेंट को संभालने के लिए इंतजार कर रहा है इससे पहले ब्राउजर अपने दृश्य को दोबारा हटा देता है। यह शायद एचटीएमएल स्पेक द्वारा दी गई गारंटी नहीं है। यही कारण है कि यह झिलमिलाहट।
इसके बजाय आपको क्या करना चाहिए उन तत्वों को बदलने के लिए है जिन्हें देखने के लिए स्क्रॉल किया जा रहा है। यह से संबंधित स्क्रीन प्रतिपादन या डबल बफरिंग से संबंधित है क्योंकि इसे कंप्यूटर गेम प्रोग्रामिंग में कहा जाता है। आप स्क्रीन से अपना दृश्य बनाते हैं और दृश्य दृश्य को दृश्य फ्रेम बफर पर कॉपी करते हैं।
मैंने स्क्रॉल क्षेत्र की ऊंचाई के लिए गुणक को शामिल करने के लिए अपना पहला JSFiddle संशोधित किया: http://jsfiddle.net/2YeZG/13/।
dad.bind('scroll', function() {
// new: query multiplier from input field (for demonstration only) and print message
var multiplier = +($("#multiplier")[0].value);
$("#message")[0].innerHTML=(multiplier*100)-100 + "% of screen rendering";
// your original code
var newScrollY = newScrollY = dad.scrollTop();
var isForward = newScrollY > oldScrollY;
var minVal = bSearch(bots, newScrollY, true);
// new: expand covered height by the given multiplier
// multiplier = 1 is similar to your code
// multiplier = 2 would be complete off screen rendering
var newScrollYHt = newScrollY + multiplier * dadHeight;
// your original code (continued)
var maxVal;
for (maxVal = minVal; maxVal < botsLen; maxVal++) {
var nxtTopSide = tops[maxVal];
if (nxtTopSide >= newScrollYHt) {
break;
}
}
maxVal = Math.min(maxVal, botsLen);
$(dadKids.slice(minVal, maxVal)).css('background', 'pink');
});
आपका कोड 1 के एक गुणक था, जिसका अर्थ है कि आप तत्व है जो वर्तमान में दिखाई दे रहे हैं अद्यतन (स्क्रॉल क्षेत्र ऊंचाई का 100%)। यदि आप गुणक को 2 पर सेट करते हैं, तो आपको अपने सभी तत्वों के लिए स्क्रीन अपडेट पूर्ण हो जाते हैं। ब्राउज़र नए पृष्ठभूमि रंग में पर्याप्त तत्व अपडेट करता है ताकि 100% स्क्रॉल भी अपडेट किए गए तत्व दिखाए। चूंकि ब्राउजर शायद ही कभी एक चरण में क्षेत्र का 100% स्क्रॉल करता है (ऑपरेटिंग सिस्टम और स्क्रॉल विधि पर निर्भर करता है!), गुणक को कम करने के लिए यह पर्याप्त हो सकता है उदा। 1.5 (जिसका अर्थ है स्क्रीन प्रतिपादन से 50%)। मेरी मशीन पर (Google क्रोम, मैक ओएस एक्स टच पैड के साथ) यदि गुणक 1.7 या इससे ऊपर है तो मैं किसी भी झिलमिलाहट का उत्पादन नहीं कर सकता।
बीटीडब्ल्यू: यदि आप पृष्ठभूमि रंग को बदलने से कहीं अधिक जटिल करते हैं, तो आपको इसे बार-बार नहीं करना चाहिए। इसके बजाय आपको यह जांचना चाहिए कि तत्व पहले ही अपडेट हो चुका है या बाद में परिवर्तन कर रहा है या नहीं।
मेरे लिए कोई झिलमिलाहट (एफएफ 16) – RASG
यह निश्चित रूप से क्रोम में झिलमिलाहट करता है, यह एक ब्राउज़र कार्यान्वयन मुद्दा हो सकता है ... यहां तक कि आपके द्वारा लिंक किए गए पृष्ठ में डेमो में भी, आप अपने अनुकूलित पृष्ठ पर भी कुछ झटके देखते हैं। क्रोम में –
मेरे लिए झिलमिलाहट, लेकिन अगर मैं वास्तव में धीरे-धीरे खींचता हूं तो वे सभी अपेक्षित रूप से बदलते हैं, ऐसा लगता है कि यदि आप तेजी से स्क्रॉल करते हैं तो बस कुछ तत्वों को छोड़ दें। – Neil