Canvas 我怎样才能做一个;牙膏;HTML5画布中的样式行?

Canvas 我怎样才能做一个;牙膏;HTML5画布中的样式行?,canvas,html5-canvas,stroke,Canvas,Html5 Canvas,Stroke,手边的任务之一是在绘图时创建一个几乎3d的效果。它给人的印象是冲程来自一根管子: 如何使用画布创建此效果 为了提供一些背景,我将使用圆形“笔刷”纹理,而不是使用画布绘制,然后在动态纹理上插值这些圆。这给了我同样的效果,但在移动设备上速度非常慢 您仍然需要使用圆形笔刷纹理 var texture = new Image; texture.src = 'brush.png' 然后,您需要创建画布并将其添加到页面的某个位置,例如: var canvas = document.createEleme

手边的任务之一是在绘图时创建一个几乎3d的效果。它给人的印象是冲程来自一根管子:

如何使用画布创建此效果


为了提供一些背景,我将使用圆形“笔刷”纹理,而不是使用画布绘制,然后在动态纹理上插值这些圆。这给了我同样的效果,但在移动设备上速度非常慢

您仍然需要使用圆形笔刷纹理

var texture = new Image;
texture.src = 'brush.png'
然后,您需要创建画布并将其添加到页面的某个位置,例如:

var canvas = document.createElement('canvas');
canvas.context = canvas.getContext('2d');
canvas.width = 200;
canvas.height = 300;
document.getElementByID('parentDiv').appendChild(canvas)
然后,您需要一个这样的事件侦听器来将其绘制到画布上

function moveMouse(xx,yy){
     canvas.context.drawImage(texture, xx, yy)
}

canvas.addEventListener('mousemove', function(e){
    if(e.clientX){
        var rect = this.getBoundingClientRect();
        if(rect)            moveMouse(e.clientX - rect.left, e.clientY - rect.top)
        else                moveMouse(e.clientX  - this.offsetLeft, e.clientY - this.offsetTop);
    }else if(e.offsetX)     moveMouse(e.offsetX, e.offsetY);
    else if(e.layerX)       moveMouse(e.layerX, e.layerY);
    else console.warn("Couldn't Determine Mouse Coordinates");
})

祝你好运

您仍然需要使用圆形笔刷纹理

var texture = new Image;
texture.src = 'brush.png'
然后,您需要创建画布并将其添加到页面的某个位置,例如:

var canvas = document.createElement('canvas');
canvas.context = canvas.getContext('2d');
canvas.width = 200;
canvas.height = 300;
document.getElementByID('parentDiv').appendChild(canvas)
然后,您需要一个这样的事件侦听器来将其绘制到画布上

function moveMouse(xx,yy){
     canvas.context.drawImage(texture, xx, yy)
}

canvas.addEventListener('mousemove', function(e){
    if(e.clientX){
        var rect = this.getBoundingClientRect();
        if(rect)            moveMouse(e.clientX - rect.left, e.clientY - rect.top)
        else                moveMouse(e.clientX  - this.offsetLeft, e.clientY - this.offsetTop);
    }else if(e.offsetX)     moveMouse(e.offsetX, e.offsetY);
    else if(e.layerX)       moveMouse(e.layerX, e.layerY);
    else console.warn("Couldn't Determine Mouse Coordinates");
})

祝你好运

您仍然需要使用圆形笔刷纹理

var texture = new Image;
texture.src = 'brush.png'
然后,您需要创建画布并将其添加到页面的某个位置,例如:

var canvas = document.createElement('canvas');
canvas.context = canvas.getContext('2d');
canvas.width = 200;
canvas.height = 300;
document.getElementByID('parentDiv').appendChild(canvas)
然后,您需要一个这样的事件侦听器来将其绘制到画布上

function moveMouse(xx,yy){
     canvas.context.drawImage(texture, xx, yy)
}

canvas.addEventListener('mousemove', function(e){
    if(e.clientX){
        var rect = this.getBoundingClientRect();
        if(rect)            moveMouse(e.clientX - rect.left, e.clientY - rect.top)
        else                moveMouse(e.clientX  - this.offsetLeft, e.clientY - this.offsetTop);
    }else if(e.offsetX)     moveMouse(e.offsetX, e.offsetY);
    else if(e.layerX)       moveMouse(e.layerX, e.layerY);
    else console.warn("Couldn't Determine Mouse Coordinates");
})

祝你好运

您仍然需要使用圆形笔刷纹理

var texture = new Image;
texture.src = 'brush.png'
然后,您需要创建画布并将其添加到页面的某个位置,例如:

var canvas = document.createElement('canvas');
canvas.context = canvas.getContext('2d');
canvas.width = 200;
canvas.height = 300;
document.getElementByID('parentDiv').appendChild(canvas)
然后,您需要一个这样的事件侦听器来将其绘制到画布上

function moveMouse(xx,yy){
     canvas.context.drawImage(texture, xx, yy)
}

canvas.addEventListener('mousemove', function(e){
    if(e.clientX){
        var rect = this.getBoundingClientRect();
        if(rect)            moveMouse(e.clientX - rect.left, e.clientY - rect.top)
        else                moveMouse(e.clientX  - this.offsetLeft, e.clientY - this.offsetTop);
    }else if(e.offsetX)     moveMouse(e.offsetX, e.offsetY);
    else if(e.layerX)       moveMouse(e.layerX, e.layerY);
    else console.warn("Couldn't Determine Mouse Coordinates");
})

祝你好运

您可以使用阴影创建3d效果:

你需要画两条线,第二条线有阴影

  • 用圆形线头画一条粗白线

  • 用阴影画第二条线。使其阴影出现在第一行的底部

这里的“技巧”是只显示第二行的阴影(第二行本身不会显示)。这是通过在画布上方绘制第二条线并使用shadowOffsetY将第二条线的阴影推到第一条线底部的画布上完成的

虽然阴影是一个相当昂贵的操作,但它比构建一系列形成牙膏的图像要便宜得多

//画布相关变量
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
//用紫色填充画布
ctx.fillStyle='#9933cc';
ctx.fillRect(0,0,cw,ch);
//用圆形线头画一条宽白线
ctx.beginPath();
ctx.moveTo(50,50);
ctx.lineTo(150,75);
ctx.lineTo(250125);
ctx.线宽=25;
ctx.lineCap='round';
ctx.strokeStyle='white';
ctx.stroke();
//使用10px模糊大小将阴影设置为黑色
ctx.shadowColor='黑色'
ctx.shadowBlur=10;
//在线下画阴影
ctx.shadowOffsetY=212.5;
//在画布顶部画一条线
//该行将不可见
//但这条线的阴影将是可见的
//在宽白线的底部
ctx.beginPath();
ctx.moveTo(42,50-200);
ctx.lineTo(150,75-200);
ctx.lineTo(258127-200);
ctx.线宽=10;
ctx.strokeStyle='red';
ctx.stroke()
#画布{边框:1px纯红;}

您可以使用阴影创建3d效果:

你需要画两条线,第二条线有阴影

  • 用圆形线头画一条粗白线

  • 用阴影画第二条线。使其阴影出现在第一行的底部

这里的“技巧”是只显示第二行的阴影(第二行本身不会显示)。这是通过在画布上方绘制第二条线并使用shadowOffsetY将第二条线的阴影推到第一条线底部的画布上完成的

虽然阴影是一个相当昂贵的操作,但它比构建一系列形成牙膏的图像要便宜得多

//画布相关变量
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
//用紫色填充画布
ctx.fillStyle='#9933cc';
ctx.fillRect(0,0,cw,ch);
//用圆形线头画一条宽白线
ctx.beginPath();
ctx.moveTo(50,50);
ctx.lineTo(150,75);
ctx.lineTo(250125);
ctx.线宽=25;
ctx.lineCap='round';
ctx.strokeStyle='white';
ctx.stroke();
//使用10px模糊大小将阴影设置为黑色
ctx.shadowColor='黑色'
ctx.shadowBlur=10;
//在线下画阴影
ctx.shadowOffsetY=212.5;
//在画布顶部画一条线
//该行将不可见
//但这条线的阴影将是可见的
//在宽白线的底部
ctx.beginPath();
ctx.moveTo(42,50-200);
ctx.lineTo(150,75-200);
ctx.lineTo(258127-200);
ctx.线宽=10;
ctx.strokeStyle='red';
ctx.stroke()
#画布{边框:1px纯红;}

您可以使用阴影创建3d效果:

你需要画两条线,第二条线有阴影

  • 用圆形线头画一条粗白线

  • 用阴影画第二条线。使其阴影出现在第一行的底部

这里的“技巧”是只显示第二行的阴影(第二行本身不会显示)。这是通过在画布上方绘制第二条线并使用shadowOffsetY将第二条线的阴影推到第一条线底部的画布上完成的

虽然阴影是一个相当昂贵的操作,但它比构建一系列形成牙膏的图像要便宜得多

//画布相关变量
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
//用紫色填充画布
ctx.fillStyle='#9933cc';
ctx.fillRect(0,0,cw,ch);
//用圆形线头画一条宽白线
ctx.beginPath();
ctx.moveTo(50,50);