H5 canvas多次重复画图后 ,位置不是第一次开始的位置

timer = window.setInterval(function () { drawLine_V0101();}, 5000);
function drawLine_V0101()
{
try
{
//获取Canvas对象(画布)
var canvas = document.getElementById("myCanvas1");
//简单地检测当前浏览器是否支持Canvas对象,以免在一些不支持html5的浏览器中提示语法错误
if (canvas.getContext) {
//获取对应的CanvasRenderingContext2D对象(画笔)
var ctx = canvas.getContext("2d");
//圆弧的旋转角度,顺时针负增长,逆时针正增长
ctx.rotate(-8 * Math.PI / 180);
//设置弧线的颜色为蓝色
ctx.strokeStyle = "#00FFD5";
var circle = {
x: 60, //圆心的x轴坐标值
y: 60, //圆心的y轴坐标值
r: 47, //圆的半径

};

                for (var i = 1; i <10; i++)
                {//开始一个新的绘制路径

                    ctx.beginPath();
                    //圆弧的旋转角度
                    circle.x = circle.x-0.342;
                    circle.y = circle.y - 0.940;
                    //沿着坐标点(100,100)为圆心、半径为50px的圆的顺时针方向绘制弧线
                    ctx.arc(circle.x  , circle.y, circle.r,65 * Math.PI / 180, 120 * Math.PI / 180, false);
                    //按照指定的路径绘制弧线
                    ctx.stroke();
                    if (i == 1) {
                        ctx.save();
                    }
                }
                ctx.restore();//回复路径

            }


        }
        catch (e) {
            alert(e.message);
        }

    }



            <!--绘制弧线 V0101-->
<div id="huxian" style="width: 150px;height:150px;position:absolute;z-index:3; left:5.76%;bottom:29.5%">
    <canvas id="myCanvas1" style="width:150px;height:150px;border: 1px solid red;"></canvas>
</div>

1个回答

//获取对应的CanvasRenderingContext2D对象(画笔)
var ctx = canvas.getContext("2d");
//圆弧的旋转角度,顺时针负增长,逆时针正增长

//ctx.rotate(-8 * Math.PI / 180);

上面这句话注释掉试试,不知道是不是你要的效果

cdc8596
奇点码农 大神挺牛的啊 !确实是我要的效果. 我把这个参数放到外面了,当做一个静态变量来处理就好了!旋转角度是在上次的基础上再次旋转.清空内容后但是旋转角度没有办法清空.我也是这样调出来的,采纳了哈
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
H5canvas 获取对话框的内容后 获取的是数字1-9 打印九层塔(1-9层的结构)

H5canvas 获取对话框的内容后 获取的是数字1-9 打印九层塔(1-9层的结构)

uniapp h5端canvas绘制

h5端的canvas怎么循环绘制啊??比如说我想画十个圆。但是我加上for循环也只出来了一个圆 求解。。。。

android 在 view 里我使用一个 自定义的 canvas 画图 出现问题

在 view 里我使用一个 自定义 canvas 画图。先在 canvas 里画出背景, 再画出几个图片。 背景是一个张图片。当触发 onTouchEvent 后,图片移动 canvas 重画背景画出来会有图片移动的痕迹。 如果背景指定了一个颜色就不会有这样的问题。 怎么解决? canvas = new Canvas(bgbitmap); 绘制背景: canvas.drawColor(selectedColor); 如果用 drawBitmap 绘制背景会有问题 // canvas.drawBitmap(bgbitmap, 0, 0, null); // 绘制 图片 for (int i = fbmpCount - 1; i >= 0; i--) { FreeBitmap fb = findFreeBmpByPriority(i); if (fb != null) this.canvas.drawBitmap(fb.getBmp(), fb.getXpoint(), fb.getYpoint(), null); } this.invalidate(); // onDraw 方法。 @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(bgbitmap, 0, 0, null); }

canvas在setInterval中无法画图(各参数传递正确)

不使用setInterval能正常画图,但是如果给画图部分套上setInterval(function(){画图},6000) 以后,就画不出来了。 我在画图函数的各个位置都设置了alert,各个参数都正确地传递了。但是图就是画不出来。 ``` window.onload = function (){ var canvas = document.createElement('canvas'); var canvas_width = $("body").css("width").split("p")[0]; var canvas_height = $("body").css("height").split("p")[0]; document.body.appendChild(canvas); canvas.id='homePageCanvas'; canvas.width = canvas_width; canvas.height = canvas_height; canvas.style.display="none"; var ctx1 = document.getElementById('homePageCanvas'); var ctx=ctx1.getContext("2d"); var hei=canvas.height; var wid=canvas_width; //传递body尺寸 var heartSize; //心的大小 var color= [ ["#FDE09A","#F3A7AC","#F29A63","#EB6161","#D8220D"], ["#FFE67A","#B4D78D","#00989E","#F6AC1A","#D8220D"], ["#D9C7C9","#B38893","#C6A7BE","#8D6982","#D8220D"], ["#FFE67A","#00989E","#B4D78D","#F6AC1A","#D8220D"], ["#E0F1F4","#9BCB60","#629A30","#49BCBD","#9F0052"], ["#FBCB72","#E9528E","#F39700","#E61C64","#E7242E"], ["#6BC8F2","#FFF8A5","#F19DB4","#5064AE","#E61C64"], ["#EBF5EB","#EE869A","#A2D7DD","#CBE3AE","#00AACE"], ["#8AC782","#9E4F1E","#EF8453","#F8C499","#007746"], ["#EFEB56","#008CD6","#6CBB5A","#EB6EA0","#6F186E"]]; //颜色数组 var posAndSize=Math.floor(Math.random()*2);//决定取哪一组“坐标数组和尺寸数组” //坐标数组 var pos=[[[1,1.5],[2,2],[4,5],[1,5],[2,4],[6,3],[8,1.7],[9,5]], [[1,2],[3,2],[4,4],[1,4],[2,3],[6,3],[8,3],[9,4]]]; //尺寸数组 var size=[[0.109375,0.109375,0.109375,0.08984375,0.08984375,0.2015625,0.140234375,0.08984375], [0.109375,0.125,0.109375,0.08984375,0.08984375,0.2015625,0.140234375,0.08984375]]; //决定取哪一组颜色 0到9之间的整数 var bColor=Math.floor(Math.random()*10+0); //画背景 ctx.fillStyle=color[bColor][0]; ctx.fillRect(0,0,wid,hei); //以下是出问题的部分,把setinterval( function(){},6000)拿掉,则画图正常 setInterval(function(){ for(var i=0;i<8;i++){ //心形的坐标 var initX=(wid/10)*(pos[posAndSize][i][0]); var initY=(hei/6)*(pos[posAndSize][i][1]); //心形的尺寸,旋转角度,颜色 var heartSize=size[posAndSize][i]*wid/2.2; var rotateAng=Math.floor(Math.random()*80+(-40))*Math.PI/180; var colorX=color[bColor][Math.floor(Math.random()*4)+1]; // //画心形 ctx.save(); ctx.beginPath(); heartCurve(initX,initY,heartSize,rotateAng,colorX); ctx.restore(); } },6000); function heartCurve(initX,initY,heartSize,rotateAng,color){ this.centryX=initX; this.centryY=initY; this.heartSize=heartSize; this.rotateAng=rotateAng; this.color=color; //alert(this.centryX); var x = 1, y; //alert(x); //alert(this.heartSize); ctx.translate(this.centryX,this.centryY); ctx.rotate(rotateAng); ctx.fillStyle = this.color; ctx.beginPath(); //alert(x); do { y = -this.heartSize*0.8*(Math.sqrt(1-x*x) + Math.pow(x*x,1/3)); x -= 0.001; ctx.lineTo(this.heartSize*x,y); } while ( x >= -1 ); //alert(x); do { y = this.heartSize*0.8*(Math.sqrt(1-x*x) - Math.pow(x*x,1/3)); x += 0.001; ctx.lineTo(this.heartSize*x,y); } while ( x <= 1 ); //alert(x); ctx.closePath(); //alert(this.color); //alert(this.color); ctx.fill(); //alert(color); } //把画的图设为背景 document.body.style.background = "url('"+homePageCanvas.toDataURL()+"')"; document.body.style.backgroundPosition="center"; document.body.style.backgroundRepeat="no-repeat"; document.body.style.backgroundAttachment="fixed"; } ```

HTML5如何在现有的背景图片上进行画图?(canvas如何实现)

就是我已经实现了canvas画图功能,我现在想在一张已有的图片上进行画图,如何实现?

java swt canvas.redraw 画图问题

# java swt canvas.redraw 画图问题 最新再用Java swt做桌面应用程序。,遇到一个小问题 问题描述:在地图上标记移动物体的位置,实际上就输在canvas中的图片上画点;由于是移动物体,所以位置时时刻刻都在变动,当把当前时刻物体绘制到canvas中的时候,就需要考虑下一次绘制,这时候我用的是canvas.redraw()来重新加载地图(图片),然后再把物体的绘制上去,这个过程就是用来刷新移动物体在地图上的位置的。问题来了,按照这个方法实际上是绘制的结果一闪而过,新的位置并没有显示到redraw之后的地图上。 求大神解答! 小弟特别感谢! canvas.addPaintListener(new PaintListener(){ @Override public void paintControl(PaintEvent e) { e.gc.drawImage(image, 0, 0); drawGridLine(); } }); ``` //程序某处 使用到canvas.redraw(); for(int j=0; j<aList.size(); j++) { canvas.redraw(); Point aPoint = (Point) aList.get(j); gc.drawImage(imageDot, 0, 0, 54, 53, (int)(aPoint.getX())-5, (int)(aPoint.getY())-5, 10, 10); } ``` ```

HTML5 canvas,画图时有什么属性或者方法可以看到画图的路径过程

HTML5 canvas,画图时有什么属性或者方法可以看到画图的路径过程? 画一个矩形,要看到矩形是怎么画出来的,一个过程动画,谢谢大大给我解答

canvas动画,线条被重复绘制该如何解决

请问为什么会出现,所绘线条颜色被加深、粗细不一,感觉前面的被重绘了?我该如何解决来避免这个问题 ![效果图](https://img-ask.csdn.net/upload/201603/16/1458117383_509179.jpg) 代码如下 ``` var c=document.getElementById("myCanvas"); var context=c.getContext("2d"); context.strokeStyle="RGBA(255,0,0,.1)" var point=[[5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25],[-2,-2,-7,-2,-7,-1,-6,-3,-6,-7,-6,-8,-0,-0,-1,-0,-5,-8,-5,-4,-6]] var k=0 var f=setInterval(function(){ if(k>20){ clearInterval(f) }else{ context.lineTo((point[0][k]-5)*20,point[1][k]*-26) context.stroke() } k++ },100) ```

canvas绘图如何实现减速停止的效果

我现在要实现这个功能,如图: ![图片说明](https://img-ask.csdn.net/upload/201701/18/1484740514_549773.png) 现在点击按钮后圆盘开始和停止能实现了,如何让停止慢慢的停下来?听老师说要用到抛物线函数?谁能告诉我怎么写,谢谢。

请问canvas在React里面无法画图是为什么?

写了方法函数,但是没有效果,请问可能是什么原因?![图片说明](https://img-ask.csdn.net/upload/201809/30/1538285317_570097.png)

移动端 HTML5 CANVAS 兼容性问题

目前在做微信公众平台 ,使用到canvas绘制图片,在某些设备上出现偶尔无法绘制的问题。 目前测试出现在 oppo R8007 小米s1上,代码是最最简单的代码,比如绘制一行字,画矩形等,均出现间歇性的无法绘制的问题。 不知道是代码哪里没有做对,还是怎样?请教各位大神,有没有什么解决方案。 <!DOCTYPE HTML> <html> <head> <title>测试canvas</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <body> <canvas id="myCanvas" ></canvas> <script type="text/javascript"> function draw () { var canvas = document.getElementById('myCanvas'); canvas.width = 640; canvas.height = 600; var context = canvas.getContext("2d"); context.fillStyle = "red"; context.fillRect(0, 0, 640, 300); }; draw(); </script> </body> </html> ``` ```

Android Canvas clipPath 画图锯齿问题

在Canvas上裁剪一个Path,将Bitmap画上去,出现锯齿问题。 Path path = new Path(); path.addCircle(left, top, radius, Path.Direction.CCW); canvas.save(); canvas.clipPath(path); Rect destRect = new Rect(left, top, right, bottom); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setAntiAlias(true); canvas.drawBitmap(bitmap, srcRect, destRect, paint); canvas.restore();

html canvas渲染字体的问题

为什么字体会变这么大,有没有什么解决办法 ``` <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <style> #canvas{ width: 100%; height: 100%; background-color: #000; } </style> <body> <canvas id="canvas"> </canvas> </body> <script> var can =document.getElementById('canvas'); var ctx =can.getContext("2d"); ctx.fillStyle="#fff"; ctx.font="5px Arial"; ctx.fillText("helloWorld",20,20) </script> </html> ``` 问题已经解决了,在此说明下希望帮助到遇到同样问题的同学,就是canvas的宽和高不要设置在css中 不管是外部引入的还是style行间的.直接在canvas后接宽高设置就好了 如下 ``` <canvas id="canvas" width="800px" height="800px"> </canvas> ```

canvas绘制可拖动可缩放的矩形

我想要实现的功能是绘制一个可拖动或者缩放的矩形,然后百度找到了下面的代码。 但是我的功能需求是,首先需要选中矩形,清除掉才能重新绘制,或者是直接改变初始化的矩形大小,或者随意拖动到想要的位置。 然后不太明白,如何实现判断鼠标是否在矩形框内。然后什么时候可以拖动,什么时候可以缩放等等。 下面的代码只懂鼠标事件的操作,很多data定义的tagObj对象的参数,除了tagObj里的recs,其他都有点摸不清作用是啥。 还有实现的原理以及逻辑,捋不清。 有知道其实现逻辑和原理吗。可以详细的注释,和理顺功能实现的逻辑吗。越详细越好,如果可以,可以付费咨询。 ``` <template> <!-- --> <div ref="tagcanvasbox" class="tagcanvasbox"> <canvas ref="tagcanvas" width='844' height='475' @mousedown ="mouseDown($event)" @mouseup ="mouseUp($event)" @mousemove ="mouseMove($event)" @contextmenu.prevent ="contextMenu($event)" @mouseout ="mouseOut($event)" ></canvas> </div> </template> <script> export default { name:'canvas', //props:{imgCanvas:{type:Object,default:{imgcanvasW:844,imgcanvasH:475}},}, data(){ return{ ctx:'', tagObj:{ newrecsObj:{}, recs:[{h: 36,w: 58,x: 404,y: 161},{h: 67,w: 58,x: 239,y: 49}], //两个矩形的宽高与坐标 x:0, y:0, url:'', radious:5, recSize:5, drag:false, resize:false, draw:false, showLitRecs:true, index:-1, side:0, startX:0, startY:0, isRightClick:false } } }, mounted(){ this.ctx = this.$refs.tagcanvas.getContext('2d'); }, methods:{ mouseOut(e){ let dom = this.$refs.tagcanvas; let x =e.clientX; let y =e.clientY; let domx1 = dom.offsetLeft; let domy1 = dom.offsetTop; let domx2 = dom.offsetLeft + dom.offsetWidth; let domy2 = dom.offsetTop + dom.offsetHeight; if( x < domx1 || x > domx2 || y < domy1 || y > domy2){ this.clearCanvas(this.$refs.tagcanvas, this.ctx); this.drawOldRecs(this.tagObj.recs, this.ctx); } }, mouseDown(e){ // let ctx = this.$refs.tagcanvas.getContext('2d'); window.console.log('down',e); this.tagObj.x = e.offsetX; this.tagObj.y = e.offsetY; this.tagObj.index = this.getEventIndex(this.tagObj.recs, this.tagObj.x, this.tagObj.y, this.tagObj.radious); //得到落点所在框的序数 window.console.log(this.tagObj.index,this.tagObj.recs); if (e.button == 2) { if (this.tagObj.index >= 0) { this.tagObj.isRightClick = true; } return; } if (this.tagObj.index >= 0) { //移动或者放缩 this.tagObj.startX = this.tagObj.recs[this.tagObj.index].x; this.tagObj.startY = this.tagObj.recs[this.tagObj.index].y; this.tagObj.side = this.getEventArea(this.tagObj.recs[this.tagObj.index], this.tagObj.x, this.tagObj.y, this.tagObj.radious); //得到落点在一个框中的区域 // console.log(this.tagObj.side,this.tagObj.index); if (this.tagObj.side < 9) { //准备缩放 this.tagObj.resize = true; } else { //准备拖动 this.tagObj.drag = true; } this.drawLitRecs(this.ctx, this.prepareLitRecs(this.tagObj.recs[this.tagObj.index]), this.tagObj.recSize); //画移动小框 } else { this.tagObj.draw = true; } this.changeResizeCursor(this.$refs.tagcanvas, this.tagObj.side); //判断小框类型 }, mouseUp(e){ if (this.tagObj.isRightClick == true) { this.tagObj.index = this.getEventIndex(this.tagObj.recs, this.tagObj.x, this.tagObj.y, this.tagObj.radious); this.tagObj.recs.splice(this.tagObj.index, 1); this.clearCanvas(this.$refs.tagcanvas, this.ctx); for (var i = 0; i < this.tagObj.recs.length; i++) { this.ctx.strokeRect(this.tagObj.recs[i].x, this.tagObj.recs[i].y, this.tagObj.recs[i].w, this.tagObj.recs[i].h); } this.tagObj.isRightClick = false; return; } this.tagObj.resize = false; this.tagObj.drag = false; if (this.tagObj.draw) { this.addToRecs(this.$refs.tagcanvas, e); //添加框 this.tagObj.draw = false; } }, mouseMove(e){ var index; var side; this.clearCanvas(this.$refs.tagcanvas, this.ctx); this.drawRuler(this.$refs.tagcanvas, this.ctx, e); this.drawOldRecs(this.tagObj.recs, this.ctx); //必须放在moveRec之下 index = this.getEventIndex(this.tagObj.recs, e.offsetX, e.offsetY, this.tagObj.radious); if (index > -1) { side = this.getEventArea(this.tagObj.recs[index], e.offsetX, e.offsetY, this.tagObj.radious); //得到落点在一个框中的区域 // console.log(index,JSON.stringify(this.tagObj.recs),this.tagObj.radious,side); } else { side = 0; } this.changeResizeCursor(this.$refs.tagcanvas, side); // console.log(this.tagObj.showLitRecs && index >= 0 && side > 0); if (this.tagObj.showLitRecs && index >= 0 && side > 0) { this.drawLitRecs(this.ctx, this.prepareLitRecs(this.tagObj.recs[index]), this.tagObj.recSize); } if (this.tagObj.draw) { this.drawRec(this.$refs.tagcanvas, this.ctx, e); } if (this.tagObj.drag) { // console.log('139',this.$refs.tagcanvas, this.tagObj.recs[this.tagObj.index], e); this.moveRec(this.$refs.tagcanvas, this.tagObj.recs[this.tagObj.index], e); } if (this.tagObj.resize) { this.reSizeRec(this.tagObj.side, this.tagObj.recs[this.tagObj.index], e.offsetX, e.offsetY, this.tagObj.recSize); } }, contextMenu(e){ window.console.log(e) return false; }, getEventIndex(recs, x, y, radious) { //得到落点所在框的序数,-1代表没有落在任何框内 , // x初始值为0,y初始值为0 if (recs.length == 0) { return -1; } for (var i = 0; i < recs.length; i++) { if (x > (recs[i].x - radious) && x < (recs[i].x + recs[i].w + radious) && y > (recs[i].y - radious) && y < (recs[i].y + recs[i].h + radious)) { return i; } if (i == recs.length - 1) { return -1; } } }, clearCanvas(canvas, ctx) { ctx.clearRect(0, 0, canvas.width, canvas.height); }, getEventArea(data, x, y, radious) { //得到落点在一个框中的区域 if (x > (data.x - radious) && x < (data.x + radious)) { if (y > (data.y - radious) && y < (data.y + radious)) { return 1; } else if (y > (data.y + radious) && y < (data.y + data.h - radious)) { return 2; } else if(y > (data.y + data.h - radious)&& y < (data.y + data.h + radious)){ return 3; } } else if (x > (data.x + data.w - radious) && x < (data.x + data.w + radious)) { if (y > (data.y - radious) && y < (data.y + radious)) { return 4; } else if (y > (data.y + radious) && y < (data.y + data.h - radious)) { return 5; } else if (y > (data.y + data.h - radious) && y < (data.y + data.h + radious)){ return 6; } } else { if (y > (data.y - radious) && y < (data.y + radious) && x > (data.x + radious) && x < (data.x + data.w- radious)) { return 7; } else if (y > (data.y + data.h - radious) && y < (data.y + data.h + radious) && x > (data.x + radious) && x < (data.x + data.w - radious)) { return 8; } else { return 9; } } }, drawLitRecs(ctx, data, size) { //画移动时的小框,data为矩形框9个点的坐标 for (var i = 0; i < data.length; i++) { ctx.strokeRect(data[i][0] - size / 2, data[i][1] - size / 2, size, size); } }, changeResizeCursor(canvas, index) { switch (index) { case 0: canvas.style.cursor = "crosshair"; break; case 1: canvas.style.cursor = "se-resize"; break; case 2: canvas.style.cursor = "e-resize"; break; case 3: canvas.style.cursor = "ne-resize"; break; case 4: canvas.style.cursor = "sw-resize"; break; case 5: canvas.style.cursor = "w-resize"; break; case 6: canvas.style.cursor = "nw-resize"; break; case 7: canvas.style.cursor = "s-resize"; break; case 8: canvas.style.cursor = "n-resize"; break; case 9: canvas.style.cursor = "move"; break; default: canvas.style.cursor = "default"; } }, addToRecs(canvas, e) { var rec = {}; rec.x = (this.tagObj.x > e.offsetX) ? e.offsetX : this.tagObj.x; rec.y = (this.tagObj.y > e.offsetY) ? e.offsetY : this.tagObj.y; rec.w = Math.abs(e.offsetX - this.tagObj.x); rec.h = Math.abs(e.offsetY - this.tagObj.y); //rec.type = currentSelectedType; this.tagObj.newrecsObj = rec; this.tagObj.recs.push(this.tagObj.newrecsObj); this.tagObj.url = this.$refs.tagcanvas.toDataURL(); }, drawRuler(canvas, ctx, e) { //鼠标画图辅助线 ctx.beginPath(); ctx.strokeStyle = 'red'; ctx.lineWidth = 1; //ctx.strokeStyle="#FF0000"; ctx.moveTo(e.offsetX, 0); ctx.lineTo(e.offsetX, canvas.height); ctx.moveTo(0, e.offsetY); ctx.lineTo(canvas.width, e.offsetY); ctx.stroke(); }, prepareLitRecs(data) { //把一个框的左上角坐标和宽高输入,得到8个坐标,左3,右3中2 var li = []; li[0] = [data.x, data.y]; li[1] = [data.x, data.y + data.h / 2]; li[2] = [data.x, data.y + data.h]; li[3] = [data.x + data.w, data.y]; li[4] = [data.x + data.w, data.y + data.h / 2]; li[5] = [data.x + data.w, data.y + data.h]; li[6] = [data.x + data.w / 2, data.y]; li[7] = [data.x + data.w / 2, data.y + data.h]; return li; }, drawOldRecs(recs, ctx) { //鼠标画图后 // let tagctx = this.$refs.tagcanvas.getContext('2d'); //btn_clear(); if (recs.length == 0) { return 0; } // console.log(recs); for (var i = 0; i < recs.length; i++) { //for (var j = 0; j < tags.length; j++) { //if (recs[i].type == tags[j].en_name) { //var id = document.getElementById('type_' + tags[j].en_name); //id.style.background = tags[j].color; this.ctx.beginPath(); ctx.lineWidth = 3; //ctx.strokeStyle =tags[j].color; ctx.strokeStyle = "rgb(121, 245, 57)"; ctx.strokeRect(recs[i].x, recs[i].y, recs[i].w, recs[i].h); //break; //} //} } }, drawRec(canvas, ctx, e) { //画图 ctx.strokeRect(this.tagObj.x, this.tagObj.y, e.offsetX - this.tagObj.x, e.offsetY - this.tagObj.y); }, moveRec(canvas, rec, e) { // console.log(canvas, rec,JSON.stringify(rec), e); rec.x = this.tagObj.startX + e.offsetX - this.tagObj.x; rec.y = this.tagObj.startY + e.offsetY - this.tagObj.y; }, reSizeRec(index, rec, ex, ey, recSize) { var temX = rec.x; var temY = rec.y; if (index < 4 && temX + rec.w - ex > recSize) { rec.x = ex; } if ((index == 1 || index == 4 || index == 7) && temY + rec.h - ey > recSize) { rec.y = ey; } if (index < 4) { if (temX + rec.w - ex > recSize) { rec.w = temX + rec.w - ex; } } else if (index < 7) { if (ex - temX > recSize) { rec.w = ex - temX; } } if (index == 1 || index == 4 || index == 7) { if (temY + rec.h - ey > recSize) { rec.h = temY + rec.h - ey; } } else if (index == 3 || index == 6 || index == 8) { if (ey - temY > recSize) { rec.h = ey - temY; } } } } } </script> <style scoped> .tagcanvasbox{ width: 100%; height: 100%; position: relative; } canvas{ position: absolute; top: 0; left: 0; } </style> ```

html5在canvas中插入图片

在canvas中显示图片非常简单。可以通过修正层为图片添加印章、拉伸图片或者修改图片等,并且图片通常会成为canvas上的焦点。用HTML5 Canvas API内置的几个简单命令可以轻松地为canvas添加图片内容。 不过,图片增加了canvas操作的复杂度:必须等到图片完全加载后才能对其进行操作。浏览器通常会在页面脚本执行的同时异步加载图片。如果试图在图片未完全加载之前就将其呈现到canvas上,那么canvas将不会显示任何图片。因此,开发人员要特别注意,在呈现之前,应确保图片已经加载完毕。

前端怎么调整纯canvas网站(snap)中某个组件的位置

初来乍到,先向各位前辈问声好: 我最近遇到一个问题,几经折腾仍然没有什么效果,特来此寻求帮助。 对于一个用前端html5新属性“canvas”技术制作的网站——snap,利用什么工具进行调试,又怎样才能移动网站中的一个canvas组件的位置?具体的我会在下面的截图中标明。 据我了解,snap是一款帮助孩子从小培养编程思想的游戏,孩子不需要懂任何代码也不需要敲键盘,仅仅通过鼠标拖拽相关控件放到脚本区域,就能制作出丰富多彩的动画效果。 [网站链接](http://www.xunqur.com/ide.html "单击左上角下载源代码") 希望大V们不吝赐教,小生在此谢过~![图片说明](https://img-ask.csdn.net/upload/201706/10/1497102158_252727.png)

html5 canvas上有多个图片元素,如何实现每个图片能用鼠标拖拽移动?或是有其他的方法= =

![图片说明](https://img-ask.csdn.net/upload/201507/19/1437288871_814194.png) 像上图所示,图片都放在canvas上,要实现像装扮类游戏可以拖拽图片, <canvas id=cv width="1000px" height="800px" style="background-color: black;margin: 0;padding: 0"></canvas> var hair2 = new Image(); hair2.src = "头发2.png"; hair2.onload = function(){ canv.drawImage(hair2,660,130,171,190); }; 画布和图片是按照上述方法贴上去的。 求指点,谢谢么么哒~

js中怎么拿到canvas里面的二进制数组

js中怎么拿到canvas画板里面的二进制数组,谁会请讲解一下,谢谢

html5 canvas 绘制base64图片失败

``` <canvas id="canvas1" ...> <!--源//--> <canvas id="canvas2" ...> <!--目的//--> <img id="testImg" src=""> <!--测试//--> ``` 场景: 2个canvas;1个img canvas1显示内容,接着将内容复制到canvas2里面。 实现: var img = canvas1Context.toDataURL('image/jpeg'); img.replace(/^data:image\/(png|jpg);base64,/, ""); myTestImg.src = img;//显示成功! var imggg = new Image(); imggg.src = img; //img.length //7259 canvas2Context.drawImage(imggg, 0, 0, 320, 480); //黑底,无图像,无报错 //png格式是白底,同样无图像

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

Linux面试题(2020最新版)

文章目录Linux 概述什么是LinuxUnix和Linux有什么区别?什么是 Linux 内核?Linux的基本组件是什么?Linux 的体系结构BASH和DOS之间的基本区别是什么?Linux 开机启动过程?Linux系统缺省的运行级别?Linux 使用的进程间通信方式?Linux 有哪些系统日志文件?Linux系统安装多个桌面环境有帮助吗?什么是交换空间?什么是root帐户什么是LILO?什...

Linux命令学习神器!命令看不懂直接给你解释!

大家都知道,Linux 系统有非常多的命令,而且每个命令又有非常多的用法,想要全部记住所有命令的所有用法,恐怕是一件不可能完成的任务。 一般情况下,我们学习一个命令时,要么直接百度去搜索它的用法,要么就直接用 man 命令去查看守冗长的帮助手册。这两个都可以实现我们的目标,但有没有更简便的方式呢? 答案是必须有的!今天给大家推荐一款有趣而实用学习神器 — kmdr,让你解锁 Linux 学习新姿势...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

史上最全的 python 基础知识汇总篇,没有比这再全面的了,建议收藏

网友们有福了,小编终于把基础篇的内容全部涉略了一遍,这是一篇关于基础知识的汇总的文章,请朋友们收下,不用客气,不过文章篇幅肯能会有点长,耐心阅读吧爬虫(七十)多进程multiproces...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

85后蒋凡:28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门,他的人生底层逻辑是什么?...

蒋凡是何许人也? 2017年12月27日,在入职4年时间里,蒋凡开挂般坐上了淘宝总裁位置。 为此,时任阿里CEO张勇在任命书中力赞: 蒋凡加入阿里,始终保持创业者的冲劲,有敏锐的...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

新一代神器STM32CubeMonitor介绍、下载、安装和使用教程

关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang最近ST官网悄悄新上线了一款比较强大的工具:STM32CubeMonitor V1.0.0。经过我研究和使用之...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

大学一路走来,学习互联网全靠这几个网站,最终拿下了一把offer

大佬原来都是这样炼成的

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

什么时候跳槽,为什么离职,你想好了么?

都是出来打工的,多为自己着想

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你期望月薪4万,出门右拐,不送,这几个点,你也就是个初级的水平

先来看几个问题通过注解的方式注入依赖对象,介绍一下你知道的几种方式@Autowired和@Resource有何区别说一下@Autowired查找候选者的...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐