JS+JQuery實現任意意嵌套的IFrame裏鼠標相對於瀏覽器窗體座標

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“,總之一個合法的變量名字就可以,然後執行完就產生這個全局變量。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章