跨瀏覽器函數

function getEventTarget(event)
{
var targetElement = null;

if (typeof event.target != "undefined")
{
    targetElement = event.target;
}
else
{
    targetElement = event.srcElement;
}

while (targetElement.nodeType == 3 && targetElement.parentNode != null)
{
    targetElement = targetElement.parentNode;
}
return targetElement;

}

事件目標函數getEventTarget:綜合了IE和W3C標準方法,找出當前事件的目標,由於事件從捕獲階段開始查找,很可能會找到子接點.所以用循環來查找上一級.

 

function attachEventListener(target, eventType, functionRef, capture)
{
if (typeof target.addEventListener != "undefined")
{
    target.addEventListener(eventType, functionRef, capture);
}
else if (typeof target.attachEvent != "undefined")
{
    target.attachEvent("on" + eventType, functionRef);
}
else
{
    eventType = "on" + eventType;

    if (typeof target[eventType] == "function")
    {
      var oldListener = target[eventType];

      target[eventType] = function()
      {
        oldListener();

        return functionRef();
      }
    }
    else
    {
      target[eventType] = functionRef;
    }
}

return true;
}

事件目標函數attachEventListener:綜合了IE和W3C標準方法,爲某元素添加一個事件.

 

function addLoadListener(fn)
{
if (typeof window.addEventListener != 'undefined')
{
    window.addEventListener('load', fn, false);
}
else if (typeof document.addEventListener != 'undefined')
{
    document.addEventListener('load', fn, false);
}
else if (typeof window.attachEvent != 'undefined')
{
    window.attachEvent('onload', fn);
}
else
{
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
}
}

addLoadListener:綜合了IE和W3C標準方法,爲文檔添加一個load事件.

 

function getElementsByAttribute(attribute, attributeValue)
{
var elementArray = new Array();
var matchedArray = new Array();

if (document.all)
{
    elementArray = document.all;
}
else
{
    elementArray = document.getElementsByTagName("*");
}

for (var i = 0; i < elementArray.length; i++)
{
    if (attribute == "class")
    {
      var pattern = new RegExp("(^| )" + attributeValue + "( |$)");

      if (elementArray[i].className.match(pattern))
      {
        matchedArray[matchedArray.length] = elementArray[i];
      }
    }
    else if (attribute == "for")
    {
      if (elementArray[i].getAttribute("htmlFor") || elementArray[i].getAttribute("for"))
      {
        if (elementArray[i].htmlFor == attributeValue)
        {
          matchedArray[matchedArray.length] = elementArray[i];
        }
      }
    }
    else if (elementArray[i].getAttribute(attribute) == attributeValue)
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
}

return matchedArray;
}

getElementsByAttribute的功能爲通過(for或則class)來查找元素.

 

function getScrollingPosition()
{
//array for X and Y scroll position
var position = [0, 0];

//if the window.pageYOffset property is supported
if(typeof window.pageYOffset != 'undefined')
{
    //store position values
    position = [
        window.pageXOffset,
        window.pageYOffset
    ];
}

//if the documentElement.scrollTop property is supported
//and the value is greater than zero
if(typeof document.documentElement.scrollTop != 'undefined'
    && document.documentElement.scrollTop > 0)
{
    //store position values
    position = [
        document.documentElement.scrollLeft,
        document.documentElement.scrollTop
    ];
}

//if the body.scrollTop property is supported
else if(typeof document.body.scrollTop != 'undefined')
{
    //store position values
    position = [
        document.body.scrollLeft,
        document.body.scrollTop
    ];
}

//return the array
return position;
}

getScrollingPosition函數的功能:取得當前頁面的滾動位置大小

 

function function getViewportSize()
{
var size = [0,0];

if (typeof window.innerWidth != 'undefined')
{
    size = [
        window.innerWidth,
        window.innerHeight
    ];
}
else if (typeof document.documentElement != 'undefined'
      && typeof document.documentElement.clientWidth != 'undefined'
      && document.documentElement.clientWidth != 0)
{
    size = [
        document.documentElement.clientWidth,
        document.documentElement.clientHeight
    ];
}
else
{
    size = [
        document.getElementsByTagName('body')[0].clientWidth,
        document.getElementsByTagName('body')[0].clientHeight
    ];
}

return size;
}()
{
var size = [0,0];

if (typeof window.innerWidth != 'undefined')
{
    size = [
        window.innerWidth,
        window.innerHeight
    ];
}
else if (typeof document.documentElement != 'undefined'
      && typeof document.documentElement.clientWidth != 'undefined'
      && document.documentElement.clientWidth != 0)
{
    size = [
        document.documentElement.clientWidth,
        document.documentElement.clientHeight
    ];
}
else
{
    size = [
        document.getElementsByTagName('body')[0].clientWidth,
        document.getElementsByTagName('body')[0].clientHeight
    ];
}

return size;
}

getViewportSize:窗口可視區域的大小

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