canvasjs图片(canvas绘制一张图片)
更新:2022-11-14 02:22
本文目录一览:
- 用HTML5中canvas加js代码把下面这张图片绘制出釆
- 为什么我用js创建的image在canvas里显示不出来?
- HTML5、JS的canvas绘制图片的问题。。
- javascript 怎么把多幅图片画进canvas中,并且能拖动他们,给他们连线
- javascript canvas 如何对图片进行绕中心点旋转
- js canvas 旋转图片问题!
用HTML5中canvas加js代码把下面这张图片绘制出釆
您好,我来为您解答: 本身他是按像素的方式渲染,所以你就1px的空心圆形,太小了,边缘会出现模糊,如果圆画大一点情况就会消失。或者你可以先平移下坐标,让你的中心坐标点是整数,再试看看。 希望我的回答对你有帮助。
为什么我用js创建的image在canvas里显示不出来?
你好,当Image对象的src被设置后,图片才开始被加载到网页缓存数据中,全部加载完成以后Image对象触发onload事件回调。如果直接设置完src属性后立即使用drawImage去读取图片数据,那么图片尚未加载完成(此时是读不到的)。因此你需要给image.onload属性设置一个回调函数,在这个函数里绘制canvas。
HTML5、JS的canvas绘制图片的问题。。
按照你的描述,估计你之前的代码有调用过 ctx.scale
或者 ctx.transform
函数,导致坐标轴被缩放了。
建议找到对应的缩放调用,合理使用 ctx.save
和 ctx.restore
函数,来避免上下文环境污染
javascript 怎么把多幅图片画进canvas中,并且能拖动他们,给他们连线
canvas不可以拖动。你也不可以直接拖动canvas里面的任何元素,包括已经载入的图片(实际上图片已经成为canvas的一部分)。先不说连线,因为我不清楚你要怎样连线。先拿一张图片来说。
思路:canvas不可以拖动,但div可以啊。考虑div和canvas。位置属性设置为absolute,否则容易出错。
注意:将div的z-index值设置大点,保证其在Canvas画面之上。
将div的大小设置成图片的大小。
图片不是在div里面,也没必要。
拖动div,拖动到新位置X1,Y1时,清除canvas的图片:ctx.clearRect(X,Y,W,H);
X是上一个位置图片在canvas中的横坐标,Y是上一个位置的纵坐标,W是图片宽度,H是图片高度。
绘制新位置下的图片:ctx.drawImage(img,X,Y);
img是一个图片节点。不会用drawImage请百度哈。
【【【具体代码:】】】
div拖动:
var divObj = document.getElementById("cover");
var moveFlag = false;
divObj.onmousedown = function(e) {
moveFlag = true;
var clickEvent = window.event || e;
var mwidth = clickEvent.clientX - divObj.offsetLeft;
var mheight = clickEvent.clientY - divObj.offsetTop;
document.onmousemove = function(e) {
var moveEvent = window.event || e;
if (moveFlag) {
divObj.style.left = moveEvent.clientX - mwidth + "px";
divObj.style.top = moveEvent.clientY - mheight + "px";
divObj.onmouseup = function() {
moveFlag = false;
}
}
}
};
来解读下这段代码:首先获取div对象,设置拖拽标志moveFlage,当onmousedown时为true表示可以拖动,当onmouseup时为false表示不能拖动了。
var clickEvent = window.event || e;
var mwidth = clickEvent.clientX - divObj.offsetLeft;
var mheight = clickEvent.clientY - divObj.offsetTop;
这三行代码是为了修正光标位置。当点击时,记录下光标在div上的位置。mwidth和mheight表示光标落点相对于div左边和上边的距离。 接下来绘制图片: 首先定义全局变量X和Y,它们是为了实时更新图像的绘制坐标。
var ctx = document.getElementById("myCanvas").getContext("2d");
var img = document.getElementById("myImg");
function drawImg() {
ctx.clearRect(0, 0, 1000, 500);
ctx.beginPath();
ctx.drawImage(img, X, Y);
ctx.closePath();
ctx.stroke();
}
window.onload = function() {
setInterval(drawImg, 1);
}
获取“画笔”,获取图片对象。这里setInterval循环执行绘制图片的函数,以刷新图片的位置,setInterval的间隔值越小,拖拽起来越“流畅”。 同时别忘了clearRect,当图片移动到下一个位置时,清除上一个位置的图片,参数为Canvas画布的坐标和尺寸。 在拖拽时将修正后的光标坐标传给X、Y:
X = moveEvent.clientX - mwidth;
Y = moveEvent.clientY - mheight;
最后加上div和图像的活动范围:
if (moveEvent.clientX <= mwidth) {
divObj.style.left = 0 + "px";
X = 0;
}
if (parseInt(divObj.style.left) + divObj.offsetWidth >= 1000) {
divObj.style.left = 1000 - divObj.offsetWidth + "px";
X = 1000 - divObj.offsetWidth;
}
if (moveEvent.clientY <= mheight) {
divObj.style.top = 0 + "px";
Y = 0;
}
if (parseInt(divObj.style.top) + divObj.offsetHeight >= 500) {
divObj.style.top = 500 - divObj.offsetHeight + "px";
Y = 500 - divObj.offsetHeight;
}
这个就看个人的要求了,注意是要同时限定div和图片的活动范围。1000与500为本例的画布大小,如果是在整个页面里活动就换成innerWidth或innerHeight。 彻底隐藏div看看效果: 最后说下点击事件,这里要注意的是在拖拽的过程中onmousedown与onmouseup二者就构成了一个click过程,但我们不希望在拖拽结束后触发点击事件。 这里有个比较简单的办法,定义一个clickFlag默认为false,当onmousedown时设为true,若进行了onmousemove事件时设为false。 在最后onmouseup时判断clickFlag的值,为true时才触发点击事件。也就是说当你按下鼠标时,只有不发现移动,松开鼠标时才会触发点击事件。
javascript canvas 如何对图片进行绕中心点旋转
给你一个旋转的demo:
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="300" height="150" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.
</canvas>
<br/>
<input type="text" id="angle_v" readonly="1"/>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.translate(100,45)
//ctx.rotate(70*Math.PI/180);
//ctx.fillRect(-50,-25,100,50);
var angle = 10;
var angle_now = 0;
myRotate()
function myRotate() {
ctx.clearRect(-100,-50,200,100); //x2 是为了把原来的图全部抹掉(不留下痕迹)
ctx.rotate(angle * Math.PI / 180);
ctx.fillRect(-50,-25,100,50);
angle_now = (angle_now + angle) % 360;
document.getElementById("angle_v").value = "当前角度:" + angle_now;
setTimeout(myRotate, 1000);
}
</script>
</body>
</html>
注意:用roate实现旋转,重点在于改变坐标中心点 : ctx.translate(100,45)
坐标中心点计算公式:x = 左上角x + 宽度/2
y = 左上角y + 高度/2
然后translate到(x,y)即可,之后调用rotate进行旋转。
旋转之后填充时注意:ctx.fillRect(-50,-25,100,50);
x = - 宽度/2
y = -高度/2
fillRect(x,y,宽度,高度)
你的例子,代码控制比较看不懂。。。,所以没在基础上整改。
补充一个参考网站(英文的):
(如果有帮助,望采纳,谢谢)
js canvas 旋转图片问题!
所有绘图动作都是在一瞬间完成的,然后立刻就被restore了,当然看不到任何效果咯。如果想让整个过程像动画片一样慢慢展示给你看,那就要用js代码结合延时技术才行。