我想使用canvas选项imageSmoothingEnabled=false;实现像素化效果,使图像在滚动时“去模糊”。
一切都很好,直到使用透明图像(即PNG)为止。缩放后的图像被投影到背景中。
此外,图像在用户滚动几个像素前不会加载。
我发现canvas.drawImage()函数拥有设置偏移量的参数。然而,我还没有找到解决方法。
演示https://jsfiddle.net/aLjfemru/。
一切都很好,直到使用透明图像(即PNG)为止。缩放后的图像被投影到背景中。
此外,图像在用户滚动几个像素前不会加载。
我发现canvas.drawImage()函数拥有设置偏移量的参数。然而,我还没有找到解决方法。
演示https://jsfiddle.net/aLjfemru/。
var ctx = canvas.getContext('2d'),
img = new Image(),
play = false;
/// turn off image smoothing - this will give the pixelated effect
ctx.mozImageSmoothingEnabled = false;
ctx.webkitImageSmoothingEnabled = false;
ctx.imageSmoothingEnabled = false;
/// wait until image is actually available
img.onload = function(){
image1.src="nf.png";
context.drawImage(image1, 50, 50, 10, 10);
};
img.src = 'https://upload.wikimedia.org/wikipedia/commons/b/bb/Gorgosaurus_BW_transparent.png';
/// MAIN function
function pixelate(v) {
document.getElementById("v").innerHTML = "(v): " + v;
/// if in play mode use that value, else use slider value
var size = v * 0.01;
var w = canvas.width * size;
var h = canvas.height * size;
/// draw original image to the scaled size
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(img, 0, 0, w, h);
ctx.drawImage(canvas, 0, 0, w, h, 0, 0, canvas.width, canvas.height);
}
function onScroll() {
$(window).on('scroll', function() {
var y = window.pageYOffset;
if (y > 10) {
y = Math.pow(y, 0.8);
if (y >= 60) {
y = 100;
}
pixelate(y);
}
});
}
onScroll();
filter: blur(3px);
- Omri Luzon