【发布时间】:2023-03-21 07:50:01
【问题描述】:
我正在使用 HTML5 画布创建一些形状。我在页面中有一些彩色按钮。画布形状有一些默认的填充样式。当我单击彩色按钮时,我想将形状的填充样式更改为相应的颜色。我创建了一些演示:
<div class="container side_color">
<h4>Side Color</h4>
<span class="btn-bg" data-bg-color="#ffa763"></span>
<span class="btn-bg" data-bg-color="#612a0c"></span>
<span class="btn-bg" data-bg-color="#190a01"></span>
<span class="btn-bg" data-bg-color="#ab0e2f"></span>
<span class="btn-bg" data-bg-color="#ff1818"></span>
<span class="btn-bg" data-bg-color="#c06248"></span>
</div>
<div class="container top_color">
<h4>Top Color</h4>
<span class="btn-bg" data-bg-color="#ffa763"></span>
<span class="btn-bg" data-bg-color="#612a0c"></span>
<span class="btn-bg" data-bg-color="#190a01"></span>
<span class="btn-bg" data-bg-color="#ab0e2f"></span>
<span class="btn-bg" data-bg-color="#ff1818"></span>
<span class="btn-bg" data-bg-color="#c06248"></span>
</div>
<div style="clear:both;"></div>
<div class="container">
<canvas id="cake">
</canvas>
</div>
$('.btn-bg').each(function () {
$(this).css("background", $(this).data('bg-color'));
});
var cakeCanvas = $('#cake')[0];
var cakeSide = cakeCanvas.getContext('2d');
cakeSide.beginPath();
cakeSide.moveTo(50, 50);
cakeSide.quadraticCurveTo(150, 70, 250, 50);
cakeSide.lineWidth = 2;
cakeSide.fillStyle = '#CCC';
cakeSide.fill();
var cakeSideVert = cakeCanvas.getContext('2d');
cakeSideVert.beginPath();
cakeSideVert.rect(50, 30, 200, 20);
cakeSideVert.fillStyle = "#CCC";
cakeSideVert.fill();
var cakeTopHalf1 = cakeCanvas.getContext('2d');
cakeTopHalf1.beginPath();
cakeTopHalf1.moveTo(50, 30);
cakeTopHalf1.quadraticCurveTo(150, 20, 250, 30);
cakeTopHalf1.fillStyle = "#b4b4b4";
cakeTopHalf1.fill();
var cakeTopHalf2 = cakeCanvas.getContext('2d');
cakeTopHalf2.beginPath();
cakeTopHalf2.moveTo(50, 30);
cakeTopHalf2.quadraticCurveTo(150, 50, 250, 30);
cakeTopHalf2.fillStyle = "#b4b4b4";
cakeTopHalf2.fill();
$('.side_color .btn-bg').click(function(){
//console.log('side' + $(this).data('bg-color'));
var fillSide = $(this).data('bg-color');
cakeSide.fillStyle = fillSide;
cakeSide.fill();
cakeSideVert.fillStyle = fillSide;
cakeSideVert.fill();
});
$('.top_color .btn-bg').click(function(){
//console.log('top' + $(this).data('bg-color'));
var fillTop = $(this).data('bg-color');
cakeTopHalf1.fillStyle = fillTop;
cakeTopHalf1.fill();
cakeTopHalf2.fillStyle = fillTop;
cakeTopHalf2.fill();
});
在此处查看更多信息:http://jsfiddle.net/shafeequemat/sorp8jtv/?。但它工作得不好。有人请帮帮我。
【问题讨论】:
-
是否有充分的理由使用画布而不是 svg?
-
cakeSide===cakeSideVert===cakeTopHalf1===cakeTopHalf2你应该创建这些函数,只引用唯一的上下文。 -
为什么“效果不好”?它有什么问题?
-
这里是一个快速更新:jsfiddle.net/sorp8jtv/1
-
谢谢凯多。它现在正在工作。
标签: javascript jquery html canvas