HTML5 responsive Leinwand: die Größe des browser-canvas zeichnen Sie verschwinden
Möchte ich eine ansprechende Leinwand mit der Größe in Prozent und einmal Benutzer die Größenänderung des Fensters die Leinwand anpassen, relativ.
Ich bin in der Lage zu skalieren, die Leinwand von unten mit code, aber das einzige problem ist, wie ich scale die Größe des Fensters mit der Maus die Zeichnung verschwinden.
<style>
body{margin:0px;padding:0px;background:#a9a9a9;}
#main{
display:block;
width:80%;
padding:50px 10%;
height:300px;
}
canvas{display:block;background:#fff;}
</style>
</head>
<body>
<div id="main" role="main">
<canvas id="paint" width="100" height="100">
< !-- Provide fallback -->
</canvas>
</div>
<script>
var c = document.getElementById('paint');
var ctx = c.getContext('2d');
var x = null;
var y;
c.onmousedown = function(e){
x = e.pageX - c.offsetLeft;
y = e.pageY - c.offsetTop;
ctx.beginPath();
ctx.moveTo(x,y);
}
c.onmouseup = function(e){
x=null;
}
c.onmousemove = function(e){
if(x==null) return;
x = e.pageX - c.offsetLeft;
y = e.pageY - c.offsetTop;
ctx.lineTo(x,y);
ctx.stroke();
}
$(document).ready( function(){
//Get the canvas &
var c = $('#paint');
var container = $(c).parent();
//Run function when browser resizes
$(window).resize( respondCanvas );
function respondCanvas(){
c.attr('width', $(container).width() ); //max width
c.attr('height', $(container).height() ); //max height
//Call a function to redraw other content (texts, images etc)
}
//Initial call
respondCanvas();
});
</script>
Dank.
- Klingt wie ein Duplikat von stackoverflow.com/questions/5517783/...
- verwenden Sie diese Bibliothek, und ziehen Sie den Bildschirm bei jedem Bild: georgealways.github.io/gee
- werfen Sie einen Blick auf diese: stackoverflow.com/a/23128583/1265753
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umgang mit Inhalt bei Größenänderung des canvas
Wenn Sie die Größe der Leinwand, die gezeichneten Inhalte werden immer gelöscht. Das ist, wie Leinwand verhält.
Können Sie entweder aktualisiert den Inhalt nach der Größenänderung oder Sie speichern den Inhalt als Bild Daten und die Wiederherstellung nach der Größenänderung (siehe Leinwand.toDataURL).
Hier ist der code, und eine Geige: http://jsfiddle.net/m1erickson/V6SVz/
der obige code ist äquivalent zu
clearRect
die verwendet wird, um deaktivieren Sie die Leinwand .so können Sie nicht passen Sie die Breite und Höhe, wenn Sie wollen behalten, was war vorher gezogen.als Lösung können Sie erstellen ein neues Bild mit der gewünschten Breite und zeichnen Sie die Inhalte der vorherigen Leinwand mit
drawImage(c)
c ist das canvas-Objekt .dann löschen Sie die LeinwandIch hatte auch das gleiche Problem, dass Sie konfrontiert sind, in der mu-Anwendung, und nach der Lektüre über es, ich kam zu diesem Schluss, dass das Verhalten von dem canvas-element möglich ist, so dass es löscht sich selbst nach der re-sizing, die einzige Lösung für dieses Problem ist es, fügen Sie einen listener für das Fenster-neu-Größe-Ereignis und zeichnen das canvas-Bereich, wenn das Ereignis aus, wenn Sie abgefeuert werden.
Hoffe, es hilft.
Quelle
Dank. es war wirklich hilfreich. unten ist der code was ich versucht habe zu tun.
Ich habe ein jQuery-plugin, mit HTML5 canvas Größe. Es wurde gebaut, um die Lücke zwischen mobilen und desktop-Nutzern. Es ist immer noch ein WIP, aber es ist erweiterbar und hat einige grundlegende Zeichenfunktionen eingebaut.
http://trsanders.github.io/responsive-sketchpad/
Ich benutze diese Methode:
Ich hatte das gleiche problem. Meine Lösung ist die Verwendung der CSS3-Eigenschaft " zoom auf den übergeordneten container der Leinwand:
coef - Koeffizienten zu machen, rückt der Leinwand aus den übergeordneten Rahmen. Sie können es null.
Ich hoffe, es hilft jemandem 🙂