キャンバスオプションimageSmoothingEnabled = falseを使用してピクセル効果を実現したい。スクロールでは画像が「ぼんやり」になります。透明なPNGでキャンバスを使用したピクセルリサイズ
透過画像、つまり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();
あなたはrequestAnimationFrameのを実装する際に何が起こる、これは問題を解決するのでしょうか? – Sander
パフォーマンスといえば:いいえ。私の問題は実際の(透明な)キャンバス画像の背後にある縮尺の画像です。これは取り除きたいものです – polarlighthouse
これはあなたがやろうとしていた最終的な事柄を手助けするかどうかわかりませんが、CSSプロパティがありますぼかしフィルタを得ることができるいわゆる「フィルタ」と呼ばれる。例: 'filter:blur(3px);' –