我知道我可以通過創建路徑getContext('2d')
並設置globalCompositeOperation
來剪輯畫布。如何使用CSS剪輯路徑剪裁畫布?
我注意到,有時我能夾了畫布-webkit-clip-path
,或clip-path
在其他瀏覽器(我在Chrome),有時我不能夠:
使用這個HTML :
<canvas width="300" height="60"></canvas>
和CSS:
canvas { -webkit-clip-path: polygon(50% 33%, 75% 10%, 80% 80%, 60% 75%, 40% 60%, 20% 10%, 40% 20%, 50% 33%);
}
產生這樣的:
這似乎是正確的。
然而,我發現,如果我改變畫布的高度,它未能夾:
<canvas width="300" height="250"></canvas>
生產:
我的假設是它在浮點上有一個問題(百分比在像素之間而不是在像素上),但是從百分比變爲像素座標s不剪輯。
*以下是鏈接到他們的jsfiddle頁面分別爲:
有誰知道爲什麼一個作品,但其他沒有?
是否有穩定用CSS剪裁畫布元素的方法,還是我需要使用canvas上下文方法?
我問的原因是我想盡可能少用js。我有一串可以輕鬆放入css的座標;而要使用ctx.beginPath()...ctx.moveTo()...ctx.lineTo()...ctx.lineTo()...
方法,我需要爲點做一個循環。
另外,我很好奇爲什麼第一個例子工作,如果任何人都可以解釋。謝謝! :)
感謝肯。這是一個很好的工作示例。我實際上是要避免使用'clip()'方法,以便我可以得到具有抗鋸齒功能的多邊形(更平滑的邊緣,就像CSS一樣):http://jsfiddle.net/bozdoz/TB9rX/任何想法爲什麼我的第一個例子工作,但其他人沒有? – bozdoz
@bozdoz我只能推測,但它似乎是一個錯誤。如果元素在應用剪輯後調整大小,剪輯似乎會丟失。你可以通過用JS重新應用css-class來測試:'document.getElementById('canvas')。className ='canvas';'(當然你需要改變CSS以使規則成爲類) 。 – K3N
@bozdoz作爲抗鋸齒:嘗試這一行:'context.translate(0.5,0.5);'更新的小提琴:http://jsfiddle.net/AbdiasSoftware/CmaUy/2/(答案中的圖像確實有抗鋸齒,但與紅色,它可能很難看到它取決於屏幕的類型)。 – K3N