iframe用過的都人都知道,iframe是一個事件無法向上級冒泡二期交互並不是那麼方便的一個html元素,但是時至今日他獨特的功能還是會出現在不少開發中,有時我們需要獲取任何一個不定的iframe中的鼠標座標,其中這個座標是相對最高級window.top的鼠標座標,或許你不常有這種需求,但是如果有製作過一些插件的經驗,估計你一定遇到過這個蛋疼的問題。
注意:我這裏指的座標是不計算滾動條的。利用的event.screenX(鼠標相對屏幕左上角)和event.clientX(鼠標相對瀏覽器左上角)
直接上需要引用的JS(需要依然JQuery)
(function (flag, VariableName) {
if (typeof (window[VariableName]) != "undefined") return;
if (flag) return;
var top_window = window.top;
var top_doc = top_window.document;
var NameSpace = ".MouseHelper";
var MoveEvent = "mousemove" + NameSpace;
function MouseHelper() {
var self = this;
self.mouseX = 0;
self.mouseY = 0;
self.browerX = 0;
self.browerY = 0;
$(top_doc).unbind(MoveEvent).bind(MoveEvent, function (e) {
self.mouseX = e.clientX;
self.mouseY = e.clientY;
self.browerX = e.screenX - e.clientX;
self.browerY = e.screenY - e.clientY;
});
}
var info;
if (typeof (top_window[VariableName]) == "undefined") info = new MouseHelper();
else info = top_window[VariableName]
try {
if (frameElement != null) {
$(document).unbind(MoveEvent).bind(MoveEvent, function (e) {
info.mouseX = e.screenX - info.browerX;
info.mouseY = e.screenY - info.browerY;
});
}
} catch (e) {
}
window[VariableName] = info;
}(typeof (jQuery) == "undefined", "MouseInfo"));
用法很簡單,執行完這段JS後你有有一個全局變量MouseInfo(且這段JS可以無限多次引用已做方重複處理,不會引起事件疊加消耗性能),他其中兩個字段爲MouseInfo.mouseX和MouseInfo.mouseY,他會隨着鼠標移動實時變化而不停賦值,所以什麼時候需要取座標了直接就像這樣如下:
var X=MouseInfo.mouseX;
var Y=MouseInfo.mouseY;
注意:有人說我不喜歡叫MouseInfo,你也可以自己改“MouseInfo“爲別的什麼例如”abc“,總之一個合法的變量名字就可以,然後執行完就產生這個全局變量。