Tengo un enorme lienzo HTML5, y quiero que funcione como los mapas de Google: el usuario puede arrastrarlo y ver solo una pequeña parte de él (el tamaño de la pantalla) todo el tiempo. representa solo la parte que puede ver en la pantalla. ¿cómo puedo hacerlo? ¿Tienes una idea?html5 - arrastre un lienzo
Respuesta
2 sencillos pasos:
- lugar el lienzo dentro de un contenedor
div
conoverflow:hidden
- utilizar cualquier método para hacer que el lienzo se puede arrastrar (voy a utilizar jQuery UI)
Para sigue mi método, tienes que ir al sitio web jQuery UI y descargar cualquier versión de la interfaz de usuario de jQuery (puedes crear una versión personalizada que solo conste de UI Core y Drag interacción de aguilón para este ejemplo.)
Desempaquete el archivo .zip y mueva la carpeta 'js' al directorio de su página.
Incluya los archivos .js que contiene la carpeta en su página.
Coloque el siguiente código entre sus <head></head>
-tags para obtener su lienzo se pueda arrastrar:
<script type="text/javacript">
$(function() {
$("#CanvasID").draggable();
});
</script>
He aquí un ejemplo:
<!DOCTYPE>
<html>
<head>
<title>canvas test</title>
<script type="text/javascript" src="js/jquery-1.5.1.min.js"></script> <!-- include the jQuery framework -->
<script type="text/javascript" src="js/jquery-ui-1.8.11.custom.min.js"></script> <!-- include JQuery UI -->
<style type="text/css">
#box{
width: 400px;
height: 400px;
border:5px solid black;
overflow:hidden;
position:relative;
} /* Just some basic styling for demonstration purpose */
</style>
<script type="text/javascript">
window.onload = function() {
var drawingCanvas = document.getElementById('myDrawing');
// Check the element is in the DOM and the browser supports canvas
if(drawingCanvas.getContext) {
// Initaliase a 2-dimensional drawing context
var context = drawingCanvas.getContext('2d');
context.strokeStyle = "#000000";
context.fillStyle = "#FFFF00";
context.beginPath();
context.arc(200,200,200,0,Math.PI*2,true);
context.closePath();
context.stroke();
context.fill();
}
// just a simple canvas
$(function() {
$("#myDrawing").draggable();
});
// make the canvas draggable
}
</script>
</head>
<body>
<div id="box">
<canvas id="myDrawing" width="800" height="800">
<p>Your browser doesn't support canvas.</p>
</canvas>
</div>
</body>
</html>
la esperanza de hacerlo entre la que va.
Nota: Este es solo un ejemplo básico. Esto aún necesitará algo de edición. Por ejemplo, el usuario puede arrastrar el lienzo totalmente fuera de la ventana gráfica (tal vez restringir el lienzo al div puede hacer el truco?). Pero este debería ser un buen punto de partida.
Usaría dos lienzos. Mantenga su enorme lienzo de origen oculto y copie partes de él en un segundo lienzo visible más pequeño. Aquí está mi prueba de concepto rápidamente hackeada:
<!DOCTYPE HTML>
<html>
<head>
<title>canvas scroll</title>
<style type="text/css">
body {
margin: 0;
padding: 0;
overflow: hidden;
}
#source {
display: none;
}
#coords{
position: absolute;
top: 10px;
left: 10px;
z-index: 2;
}
#coords p{
background: #fff;
}
</style>
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script type="text/javascript">
var $window;
var img;
var $source; var source; var sourceContext;
var $target; var target; var targetContext;
var scroll = {
x : 0,
y : 0
};
var scrollMax;
function init() {
// Get DOM elements
$window = $(window);
$source = $('canvas#source');
source = $source[0];
sourceContext = source.getContext("2d");
$target = $('canvas#target');
target = $target[0];
targetContext = target.getContext("2d");
// Draw something in source canvas
sourceContext.rect(0, 0, source.width, source.height);
var grd = sourceContext.createLinearGradient(0, 0, source.width, source.height);
grd.addColorStop(0, '#800080');
grd.addColorStop(0.125, '#4B0082');
grd.addColorStop(0.25, '#0000FF');
grd.addColorStop(0.325, '#008000');
grd.addColorStop(0.5, '#FFFF00');
grd.addColorStop(0.625, '#FFA500');
grd.addColorStop(0.75, '#FF0000');
grd.addColorStop(0.825, '#800080');
sourceContext.fillStyle = grd;
sourceContext.fill();
/*
* Setup drag listening for target canvas to scroll over source canvas
*/
function onDragging(event){
var delta = {
left : (event.clientX - event.data.lastCoord.left),
top : (event.clientY - event.data.lastCoord.top)
};
var dx = scroll.x - delta.left;
if (dx < 0) {
scroll.x = 0;
} else if (dx > scrollMax.x) {
scroll.x = scrollMax.x;
} else {
scroll.x = dx;
}
var dy = scroll.y - delta.top;
if (dy < 0) {
scroll.y = 0;
} else if (dy > scrollMax.y) {
scroll.y = scrollMax.y;
} else {
scroll.y = dy;
}
event.data.lastCoord = {
left : event.clientX,
top : event.clientY
}
draw();
}
function onDragEnd(){
$(document).unbind("mousemove", onDragging);
$(document).unbind("mouseup", onDragEnd);
}
function onDragStart(event){
event.data = {
lastCoord:{
left : event.clientX,
top : event.clientY
}
};
$(document).bind("mouseup", event.data, onDragEnd);
$(document).bind("mousemove", event.data, onDragging);
}
$target.bind('mousedown', onDragStart);
/*
* Draw initial view of source canvas onto target canvas
*/
$window.resize(draw);
$window.trigger("resize");
}
function draw() {
target.width = $window.width();
target.height = $window.height();
if(!scrollMax){
scrollMax = {
x: source.width - target.width,
y: source.height - target.height
}
}
targetContext.drawImage(source, scroll.x, scroll.y, target.width, target.height, 0, 0, target.width, target.height);
$('#x').html(scroll.x);
$('#y').html(scroll.y);
}
$(document).ready(init);
</script>
</head>
<body>
<div id="coords">
<p>Drag the gradient with the mouse</p>
<p>x: <span id="x"></span></p>
<p>y: <span id="y"></span></p>
</div>
<canvas id="source" width="4000" height="4000"></canvas>
<canvas id="target"></canvas>
</body>
</html>
- 1. Traducir un lienzo html5
- 2. "googlemaps" arrastrando con lienzo html5
- 3. Impresión de un lienzo html5?
- 4. HTML5 Crear dinámicamente lienzo
- 5. Lienzo dentro de lienzo de html5
- 6. unidades de lienzo html5
- 7. inspector de lienzo HTML5?
- 8. HTML5 círculo lienzo texto
- 9. HTML5 getImageData sin lienzo
- 10. ¿Cómo hago un lienzo transparente en html5?
- 11. Cómo dibujar polígonos en un lienzo HTML5?
- 12. Dibujar texto girado en un lienzo HTML5
- 13. ¿Desgarro en el lienzo HTML5?
- 14. HTML5 Versión de arrastre offsetX desplazamientoY salto
- 15. "Borrado" en el lienzo html5
- 16. Agregar elementos al lienzo html5
- 17. Similitudes entre el lienzo HTML5 y el lienzo de Android
- 18. Cómo dibujar un sector circular en un lienzo html5?
- 19. Cómo agregar un Lienzo html5 dentro de un DIV
- 20. Arrastre el lienzo en el generador de interfaz
- 21. Rectángulo en HTML5 El lienzo está estirado
- 22. Eventos de objeto de lienzo HTML5
- 23. desplazamiento/deslizamiento de fondo en lienzo html5
- 24. lienzo html5 usa la imagen como máscara
- 25. HTML5 drawimage de video a lienzo
- 26. Desplazamiento personalizado en el lienzo html5
- 27. Degradado rectangular con elemento de lienzo HTML5
- 28. Lienzo HTML5 y ancho de línea
- 29. ¿Método para convertir lienzo HTML5 a SVG?
- 30. firefox y radialgradient (usando lienzo html5)
Lo siento, me equivoqué. Su pregunta no fue cómo hacer que esté dentro de una pantalla, sino cómo renderizar la parte del lienzo que se encuentra actualmente dentro de la pantalla. Bueno, no sé cómo hacer eso. Lo siento. – fruitbooter
+1 por ser honesto! –