在reset的时候,画布可能也不能完全覆盖,或者过大,我发现可以改一处代码(大概267行):
reset: function() { var $this = $(this), width = $this.width(), height = $this.height(), data = $this.data('eraser'); if ( data ) { data.ctx.globalCompositeOperation = "source-over"; data.ctx.drawImage( data.source, 0, 0 ,width,height); data.ctx.globalCompositeOperation = "destination-out"; var n = data.numParts; while( n-- ) data.parts[n] = 1; data.ratio = 0; data.complete = false; } }
$('#yourImage').eraser( { completeRatio: .5, completeFunction: showResetButton }); //if ( data.completeFunction != null ) data.completeFunction();
如果大家的回调函数和我一样写的是clear清除画布的话,记着把clear函数里面的这行代码删掉,否则会进入递归死循环,报错超过js的最大执行次数
作者大大,为什么我在最外层加上有滚动条的div,可擦除的地方就只有页面加载完毕之后可以看见的部分,而且向下滚动擦除还会错位
在源码中的 touchStart、touchMove、mouseDown、mouseMove这些方法函数的第一行,加上代码:
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
然后在下面的这一行
ty = event.pageY - data.posY;
改成
ty = event.pageY - data.posY + scrollY;
就可以了。
另外,在 clear 方法中,
if (data.completeFunction != null) data.completeFunction();
这行代码注释掉,因为会导致死循环继而导致内存溢出的崩溃。
在么 亲,为什么我换了两张大小一样的图片就出问题了,覆盖层的那个图片总是被放大了,不知道为什么,用你自带的图片正好
Maximum call stack size exceeded
解决手机重置reset方法,canvas drawImage图片问题
reset: function() { var $this = $(this), data = $this.data('eraser'); if (data) { var image = new Image(); image.src = "images/canvas_mask.png"; image.onload = function() { data.ctx.globalCompositeOperation = "source-over"; data.ctx.drawImage(image, 0, 0, $this.width(), $this.height()); data.ctx.globalCompositeOperation = "destination-out"; var n = data.numParts; while (n--) data.parts[n] = 1; data.ratio = 0; data.complete = false; } } }回复
我用在手机上,jQuery.eraser.js做刮刮奖的页面,但是在手机上有时候会出现没有覆盖图层的问题,就是没有图擦去画布,只有下面的图片,请问这个问题要怎么解决???
回复