8 ответов:
Это было возможно в WebKit с 2008 года, см. здесь.
<html> <head> <style> div { background: -webkit-canvas(squares); width:600px; height:600px; border:2px solid black } </style> <script type="application/x-javascript"> function draw(w, h) { var ctx = document.getCSSCanvasContext("2d", "squares", w, h); ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, 55, 50); ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, 55, 50); } </script> </head> <body onload="draw(300, 300)"> <div></div> </body> </html>В настоящее время Firefox 4 содержит функцию, которая позволяет использовать любой элемент (включая холст) в качестве фона CSS, таким образом:
<p id="myBackground1" style="background: darkorange; color: white; width: 300px; height: 40px;"> This element will be used as a background. </p> <p style="background: -moz-element(#myBackground1); padding: 20px 10px; font-weight: bold;"> This box uses #myBackground1 as its background! </p>посмотреть Mozilla hacks для конкретики.
Да!!!! Вы можете поместить холст в CSS фон.
var Canvas = document.createElement("canvas"); ... do your canvas drawing.... $('body').css({'background-image':"url(" + Canvas.toDataURL("image/png")+ ")" });Я знаю, что это довольно старый вопрос, но мне захотелось опубликовать свой ответ для людей, которые посетят эту страницу, потому что это правильный ответ, всего в одной строке кода, используя
Я думаю, что ближе всего вы могли бы получить, чтобы сделать в
canvas, называютtoDataUrl()на нем, чтобы получить содержимое в виде изображения, и присвоение этого результата к нужному элементуbackground-imageсобственность. Однако это даст только статический фон. Если вы хотите иметь возможность дальнейшего обновленияcanvas, однако, тогда вам нужно будет вместо этого разместить холст за другим элементом, как уже предложил Йохан.
попробовать
-moz-element(#id)для CSSbackgroundв Firefox.и
-webkit-canvas(name)для CSSbackgroundin WebKit на основе браузеров.
Я пытался достичь этой же функции в последние недели, лучшее решение, которое я нашел, это то же самое, предложенное bcat:
- рендер холст (видимый или скрытый)
- получить изображение холста с " холст.toDataURL"
- Asign это изображение-данные в качестве фонового изображения для элемента (я использую MooTools)
плохая новость для статических изображений работает, но с анимацией в Chrome иногда "мигание", а в Firefox мигает-а-много. Может быть, кто-то знает обходной путь, чтобы избавиться от этого "неприятного мигания".
С наилучшими пожеланиями.
P:.<!DOCTYPE html> <html> <head> <title>Asign canvas to element background</title> <script type="text/javascript" src="/js/mootools.1.2.4.js"></script> <style type="text/css"> * { outline:0; padding:0; margin:0; border:0; } body { color:#fff; background:#242424; } </style> <script> window.addEvent('domready',function() { //GET BODY var mibodi = $('mibodi'); var viewportSize = mibodi.getSize(); //GET CANVAS var micanvas = $('micanvas'); var ctx = micanvas.getContext('2d'); var playAnimation = true; //GET DIV var midiv = $('midiv'); //VARIABLES var rotate_angle = 0; var rotate_angle_inc = 0.05; //FUNCIÓN DE INICIALIZACIÓN function init(){ ctx.clearRect (0, 0, 512, 512); //CLEAR CANVAS ctx.fillStyle = 'rgba(128,128,128,1)'; ctx.strokeStyle = 'rgba(255,255,255,1)'; if (playAnimation) { setInterval(draw,100);// } } //INIT //FUNCIÓN DE DIBUJADO function draw() { //CLEAR BACKGROUND ctx.clearRect (0, 0, 512, 512); //DRAW ROTATING RECTANGLE ctx.save(); ctx.translate( micanvas.width / 2, micanvas.height / 2 ); ctx.rotate( rotate_angle ); ctx.fillRect(0, 0, 100, 100); ctx.restore(); //GET CANVAS IMAGE var dataURL = micanvas.toDataURL("image/png"); //SET IMAGE AS BACKGROUND OF THE ELEMENTS midiv.setStyle('background-image', 'url(' + dataURL + ')'); mibodi.setStyle('background-image', 'url(' + dataURL + ')'); //ANGLE INCREMENT rotate_angle = rotate_angle + rotate_angle_inc; } //DRAW //BEGIN TO DRAW init(); });//domeady </script> </head> <body id="mibodi" > <canvas id="micanvas" width="512" height="512" style="float:left;" style="display:none;"> Este texto se muestra para los navegadores no compatibles con canvas. <br> Por favor, utiliza Firefox, Chrome, Safari u Opera. </canvas> <div id="midiv" style="width:512px;height:512px;background:#f00;float:left;"> Sample </div> </body> </html>
не могу прокомментировать, поэтому я создам свой собственный ответ на это.
этот ответ основан на @livedo, @Eric Rowell и @shabunc
http://jsfiddle.net/MDooley47/yj26psdb/
window.i = 0; function draw(w, h) { window.i+=5; if (window.webkitURL != null) { var ctx = document.getCSSCanvasContext("2d", "squares", 100, 100); ctx.fillStyle = "rgb(200,0,0)"; ctx.fillRect (10, 10, w, h); ctx.fillStyle = "rgba(0, 0, 200, 0.5)"; ctx.fillRect (30, 30, w, h); } else { var ctxmozc = document.getElementById("squares"); var ctxmoz = ctxmozc.getContext("2d"); ctxmoz.fillStyle = "rgb(200,0,0)"; ctxmoz.fillRect (10, 10, w, h); ctxmoz.fillStyle = "rgba(0, 0, 200, 0.5)"; ctxmoz.fillRect (30, 30, w, h); } } setInterval(function(){draw(window.i, window.i);}, 500);div { background: -webkit-canvas(squares); background: -moz-element(#squares) repeat-x; width:575px; height:475px; border:2px solid black }<body> <div></div> <canvas id="squares" name="squaresmoz" style="display: none;" ></canvas> </body>
вы можете эмулировать это поведение быстро без снижения производительности
toDataURL()используяz-index(конечно, это обходной путь, так как CSS images 4 / CSS Houdini не реализовал "background: element (#mycanvas)" по состоянию на 2017 год))работает JSFiddle здесь. Я этого не писал, вся заслуга идет на Дерек Люн:
вы можете использовать CSS Paint API
.elem { backgound: paint(squares); }Подробнее смотрите здесь:
блоги:
https://vitaliy-bobrov.github.io/blog/exploring-the-css-paint-api/ https://vitaliy-bobrov.github.io/blog/css-paint-in-action-bar-chart/
Comments