मैं इस वेबसाइट के लिए एक छोटे से ड्राइंग लिपि (कैनवास) ने लिखा: http://scri.ch/क्या मूसोम घटना को तेज करने का कोई तरीका है?
आप दस्तावेज़ पर क्लिक करते हैं, हर mousemove
घटना मूल रूप से निम्नलिखित निष्पादित करता है:
- निर्देशांक प्राप्त करें।
- context.lineTo()
इस बिंदु और पिछले एक
के बीच - context.stroke()
लाइन
आप देख सकते हैं, अगर आप कर्सर बहुत तेजी से ले जाते हैं, घटना पर्याप्त ट्रिगर नहीं कर रहा (अपने CPU/ब्राउज़र पर निर्भर करता है/आदि ।), और एक सीधी रेखा का पता लगाया गया है।
स्यूडोकोड में:
window.addEventListener('mousemove', function(e){
myContext.lineTo(e.pageX, e.pageY);
myContext.stroke();
}, false);
यह एक ज्ञात समस्या है, और समाधान ठीक है, लेकिन मुझे लगता है कि अनुकूलन करने के लिए करना चाहते हैं।
तो stroke()
की बजाय प्रत्येक बार एक मूसमॉव घटना ट्रिगर होती है, मैंने नए समन्वय को सरणी कतार के अंदर रखा है, और नियमित रूप से इसे टाइमर के साथ खींच/खाली कर दिया है।
स्यूडोकोड में:
var coordsQueue = [];
window.addEventListener('mousemove', function(e){
coordsQueue.push([e.pageX, e.pageY]);
}, false);
function drawLoop(){
window.setTimeout(function(){
var coords;
while (coords = coordsQueue.shift()) {
myContext.lineTo(coords[0], coords[1]);
}
myContext.stroke();
drawLoop();
}, 1000); // For testing purposes
}
लेकिन यह लाइन में सुधार नहीं किया। तो मैंने केवल mousemove
पर एक बिंदु बनाने की कोशिश की। वही परिणाम: अंक के बीच बहुत अधिक जगह।
यह मुझे एहसास हुआ कि पहला कोड ब्लॉक पर्याप्त कुशल है, यह केवल mousemove
ईवेंट है जो बहुत धीरे-धीरे ट्रिगर कर रहा है।
तो, बेकार ऑप्टिमाइज़ेशन को लागू करने के लिए कुछ समय बिताए जाने के बाद, यह आपकी बारी है: क्या mousemove
डीओएम स्क्रिप्टिंग में गति को गति देने के लिए कोई तरीका है?
क्या किसी भी समय माउस स्थिति "अनुरोध" करना संभव है?
आपकी सलाह के लिए धन्यवाद!
डुप्लिकेट: http://stackoverflow.com/questions/5258424/how-to-set-mousemove-update-speed/ – river