昨天我們已經實做出全景圖的雛型(Day18),接下來加入使用者互動的部分:
wheel
事件並且對偏移量做一些處理即可var pointerX = 0;
var pointerY = 0;
function registerInteractionEvents() {
var on = document.addEventListener.bind(document);
var isMousePressed = false;
on('wheel', function(e) {
camera.fov += e.deltaY * 0.02;
}, false);
}
registerInteractionEvents();
為了統一事件處理,我將監聽事件的部分統一放入到 registerInteractionEvents
當中。設置的方式非常簡單,監聽 wheel
事件,並且加上適當的參數即可。(每次的滾動會增加 0.02 的視野)
on('mousedown', function(e) {
isMousePressed = true;
pointerX = e.clientX;
pointerY = e.clientY;
}, false);
on('mousemove', function(e) {
if (isMousePressed) {
lontitude = ( pointerX - e.clientX ) * 0.02 + lontitude;
latitude = ( e.clientY - pointerY ) * 0.02 + latitude;
}
return ;
}, false);
on('mouseup', function(e) {
isMousePressed = false;
}, false);
首先我們加入一個 flag 來記錄目前的滑鼠按下的狀態,並且監聽 mousedown
mouseup
來修改目前的滑鼠狀態。
這邊並不會講解太多程式面的東西,各位可以依照自己喜好的方式來控管滑鼠的狀態,例如 Rx.js 或是 Redux 等等......。
計算偏移量之後再賦值給 lontitude
跟 latitude
這兩個變數。之後的 animate
方法會重新計算並且重繪畫面。這樣子一來我們的全景圖實作就完成了。