在觀察不少網站的時候,會有一個特效,遮罩層移入方向會隨着鼠標的移入方向來改變,這樣就須要對鼠標移入的方向進行判斷。編程
1 var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1); 2 var y = (e.pageY - this.offsetTop - (h / 2)) * (h > w ? (w / h) : 1); 3 var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;
判斷鼠標移入的值落入該區域的哪一個部位,得出鼠標的移入方向。編程語言
1)、將判斷區域問題轉成判斷角度。函數
2)、x和y的計算:網站
該元素的座標原點是(offsetLeft, offsetTop),那麼要轉成判斷角度,必須將原點拉到該元素的中點上。則中點的座標是Oz( offsetLeft + w/2, offsetTop + h/2 );this
那麼鼠標落入的點M(e.pageX,e.pageY);spa
若是要將這個點轉成以Oz爲中心,那麼就得換算成 x點:e.pageX - (offsetLeft + w/2) ; y點:e.pageY - (offsetTop + h/2)。3d
那麼x和y就出來了。 (w > h ? (h / w) : 1)和 (h > w ? (w / h) : 1)這兩個請先忽略,後面會解釋。code
3)、Math.atan2(x,y)函數:blog
這個函數返回的值至關於這個點的角度,固然貌似這些編程語言裏返回的基本都是弧度。而這代碼是用角度來算的因此避免不了弧度和角度的轉換,io
公式:弧度=角度乘以π後再除以180,
角度=弧度除以π再乘以180
(Math.atan2(y, x) * (180 / Math.PI) 其實等於這個 (Math.atan2(y, x) / ( Math.PI/ 180)
4)、核心部分,
Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4;