2012-03-06 8 views
5

मैं एक स्क्रिप्ट है कि उपयोगकर्ता माउस के साथ आकर्षित करने के लिए अनुमति देता है पर काम कर रहा हूँ: http://jsfiddle.net/ujMGu/मैं अपने ड्राइंग ऐप में एक लाइन तोड़ने से तेज माउस आंदोलन को कैसे रोक सकता हूं?

समस्या: तुम सच में तेजी से माउस ले जाते हैं, तो यह झटके और कुछ स्थानों पर छोड़ देता है। ड्राइंग लाइन के बीच में किसी भी काले रंग की जगहों को छोड़ दिए बिना सभी बिंदुओं को कैप्चर करने का कोई तरीका है?

सीएसएस

#myid{background: none repeat scroll 0 0 #000000; 
    color: #FFFFFF; 
    display: block; 
    height: 1000px; 
    margin: 3%; 
    position: relative; 
    text-indent: -1100px;}​ 

जे एस/JQ

$('#myid') 
.css('position','relative') 
.unbind().die() 
.bind('mousemove mouseover',function (e){ 
var top = parseInt(e.pageY)-$(this).offset().top; 
var left= parseInt(e.pageX)-$(this).offset().left; 
var pixel= $('<div></div>') 
    .css({ 
     width:10,height:10, 
     background: '#fff', 
     position:'absolute', 
     top: top, left: left, 
     'border-radius': 2 
    }); 
    $(this).append(pixel); 
});​ 

एचटीएमएल

<div id="myid"></div> 
+1

शायद divs के साथ ऐसा करने का बुरा विचार; इसके बजाय एक कैनवास का उपयोग करने पर विचार करें। अधिकांश ब्राउज़र divs की तुलना में कैनवास के साथ तेज़ होंगे, क्योंकि divs को केवल रास्टर पेंटिंग की बजाय डोम हेरफेर की आवश्यकता होती है। –

+0

इस तरीके से पेंटिंग (divs को पिक्सेल के रूप में उपयोग करना) काफी सीमित है। आपकी आवश्यकताओं क्या हैं और आपको किस ब्राउज़र समर्थन की आवश्यकता है? क्या कोई कारण है कि आपको कैनवास (कहने) की बजाय इस विधि का उपयोग करने की आवश्यकता है? –

+0

coz मैं कैनवास से बहुत परिचित नहीं हूं, और मुझे कुछ सरल की आवश्यकता है ताकि मैं इसे अन्य लोगों के लिए एक जटिल तरीके से भेज सकूं, क्योंकि इसके पीछे कुछ और शीर्ष पर ओवरले/मुखौटा है। – Val

उत्तर

3

चेक बाहर इस: http://jsfiddle.net/KodeKreachor/9DbP3/6/

दिए गए लिंक पर निम्नलिखित वस्तु एल्गोरिथ्म शामिल हैं:

var drawer = new Drawer(); 

मुझे यदि आप जानते हैं मेरे पास कोई सवाल है कि मैंने यह कैसे किया। आधार Bresenham की लाइन एल्गोरिदम पर आधारित है और पुराने ब्राउज़र में भी संगत होना चाहिए।

+1

नाइसी, अच्छा कुछ ऐसा ठीक है :), मैं भी आपके सभी उत्तरों को स्वीकार कर सकता हूं, मुझे नहीं पता कि कौन सा चयन करना है :) सही जवाब के रूप में आप सभी का सही जवाब है diff तरीके :) – Val

+0

खुशी है कि यह आपके लिए काम किया। कैनवास जाने का एक शानदार तरीका है और निश्चित रूप से भी सिफारिश की जाती है। मैं बस कुछ ऐसा चाहता था जो पुराने ब्राउज़र में काम करेगा, यही कारण है कि मैंने सरल divs का उपयोग करके इस उदाहरण को लागू किया। – KodeKreachor

3

आप का ट्रैक रखने की आवश्यकता होगी पिछला बिंदु और फिर नए बिंदु और पिछले के बीच एक रेखा खींचें।

+0

+1, हालांकि "रेखा खींचना" सरल नहीं है जब चित्रकला की आपकी विधि पूरी तरह से 10x10 divs की श्रृंखला को स्थिति में रखती है। –

2

कैनवास का उपयोग क्यों नहीं करें? यह रेखा खींचने उपयोगिताओं की एक संख्या है:

http://www.w3schools.com/html5/html5_ref_canvas.asp

+0

coz मैं प्रयोग कर रहा हूं, इसके साथ, बस सोचा कि यह अच्छा होगा, और कैनवास भी, जो मेरे मन में था उसके साथ काम नहीं करेगा :) जब तक कि मैं वास्तव में उस पर अलौकिक समय नहीं लगाता जो मेरे पास नहीं है :) सोचा था कि यह होगा बहुत तेज रहा :) :) – Val

2

जैसा कि @ कंद ने उल्लेख किया है, कैनवास वास्तव में ड्राइंग के लिए सबसे अच्छा उपकरण है।

आप अपने div विधि का उपयोग करना चाहिए, या अगर यह सिर्फ मनोरंजन के लिए है, तो आप, Bresenham's line algorithm पिछले माउस स्थिति सहेज कर अपने दृष्टिकोण का विस्तार कर सकते हैं और फिर, बीच "पिक्सल" लाइन का उपयोग पूरा करने के लिए आवश्यक आकर्षित उदाहरण के लिए अगर ।

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