Wyrysowane linie pojawiają się nie tylko w elemencie Canvas, ale także u góry strony, które jest wyświetlane ponownie.Podwójny wyświetlacz elementu z płótna
Dzieje się tak, gdy wydarzenie dotykowe zostanie zwolnione.
Tutaj można znaleźć kod źródłowy i wynik (używane są PhoneGap i Jquery Mobile).
Czy ktoś ma pojęcie, jaka jest przyczyna tego błędu?
http://gomami.ch/bugs/screenshot.png http://gomami.ch/bugs/screenshot.png
JavaScript (załadowany w nagłówku po obejmuje do jQuery/PhoneGap):
//*********************************************************
// Wait for Cordova to Load
//*********************************************************
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
canvas("aufprallstelleA","test");
}
// function to setup a new canvas for drawing
function canvas(canvas, element){
//define and resize canvas
width = $(window).width();
width = (width/100)*90;
height = width/1.6901408;
$("#content").width(width);
$("#"+element).height(height);
$("#"+element).width(width);
var html = 'This is de Canvas field wehre you can draw<br><canvas id="'+
canvas+'" width="'+width+'" height="'+height+
'" style="border:black solid 1px;background-size: 100%; background-repeat: no-repeat;background-image: url(\'images/allgemein/aufprallstelle.PNG\');"></canvas>';
$("#"+element).html(html);
// setup canvas
ctx=document.getElementById(canvas).getContext("2d");
ctx.strokeStyle = "red";
ctx.lineWidth = 5;
// setup to trigger drawing on mouse or touch
$("#"+canvas).on("touchstart", start);
$("#"+canvas).on("touchmove", move);
}
function start(e){
e = e.originalEvent;
x = e.changedTouches[0].pageX-20;
y = e.changedTouches[0].pageY-$(this).position().top;
ctx.moveTo(x,y);
}
function move(e){
e.preventDefault();
e = e.originalEvent;
x = e.changedTouches[0].pageX-20;
y = e.changedTouches[0].pageY-$(this).position().top;
ctx.lineTo(x,y);
ctx.stroke();
}
function clearcanvas(id) {
var canvas = document.getElementById(id);
var context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height);
}
HTML:
<div data-role="page" id="main">
<div data-role="header" id="header">
<div id="header_anzeige">
</div>
</div>
<div data-role="content" id="content" >
<div id="test" style="margin-top:265px;"></div><br>
Hello, this is JQuery Mobile running in PhoneGap 2
</div>
</div>
copyright
</div>
</div>
Czy mimo to można to zrobić w jsFiddle, lub dostarczyć kopię tego, jak wygląda kod HTML po załadowaniu strony i javascript ma elementy canvas? – Malco
W moim przypadku użyłem kodu wspomnianego na http://www.pubnub.com/blog/multiuser-draw-html5-canvas-tutorial/, po prostu dostosowałem zdarzenia myszy, aby dotknąć zdarzeń. Działa dobrze na komputerze, ale w aplikacjach cordova rysunek na płótnie jest odtwarzany na głównej stronie z przesunięciem na lewy górny ... Nawet jeśli rysuję statyczny rysunek bez przekazywania zdarzeń dotyku, ten jest odtwarzany dwa razy . – nonozor