我想從前端專家那里創(chuàng)建這個像素效果。
雖然我能夠在全屏畫布上實現(xiàn)整個像素效果:
const canvas = getElementById('canvas'); canvas.height = window.innerHeight; // 給畫布設(shè)置全屏高度 canvas.width= window.innerWidth; // 給畫布設(shè)置全屏寬度
并且很容易獲取鼠標(biāo)的坐標(biāo)
const mouse = { x: undefined, y: undefined } canvas.addEventListner('mousemove', function(e) { mouse.x = e.x; mouse.y = e.y; }
此時畫布的寬度和高度與文檔相等,因此很容易獲得鼠標(biāo)的準(zhǔn)確坐標(biāo)。 但是當(dāng)我嘗試使用800px X 400px的尺寸并在其中使用flexbox(如網(wǎng)站所示)時,我的鼠標(biāo)坐標(biāo)完全混亂了,我花了幾個小時來修復(fù),但無法獲得與上述網(wǎng)站中顯示的準(zhǔn)確性。同時還存在一些與調(diào)整大小相關(guān)的問題。
我想知道如何保持鼠標(biāo)的準(zhǔn)確性。
非常感謝您的幫助。
我相信當(dāng)你使用e.x和e.y時,即使在canvas的事件監(jiān)聽器中使用,它們返回的是相對于整個頁面左上角像素的鼠標(biāo)坐標(biāo),而不僅僅是canvas的坐標(biāo)。如果你所說的"messed up"是指無論你在哪里點擊,像素效果都會以某個固定方向偏移,那么這可能是你的問題,你應(yīng)該用e.clientX和e.clientY代替e.x和e.y。e.clientX中的"client"指的是監(jiān)聽器所針對的元素,并指定相對于該元素而不是頁面給出事件坐標(biāo)。如果以其他方式出現(xiàn)問題,那么我想我沒有答案。