自己整理的一套javascript小型公用库

本文提供了一套实用的JavaScript事件处理库,包括加载监听、事件绑定、事件解除等功能,并覆盖了不同浏览器的兼容性问题。此外,还提供了获取滚动位置、光标位置等常用功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



/**
* @author zjq common use jslib
*/
//事件侦听函数
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();
};
}
}
}

//添加事件

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;
}

//去除事件公用函数
function detachEventListener(target, eventType, functionRef, capture){
if (typeof target.removeEventListener != "undefined") {
target.removeEventListener(eventType, functionRef, capture)
}
else
if (typeof target.detachEvent != "undefined") {
target.detachEvent("on" + eventType, functionRef);
}
else {
target["on" + eventType] = null;
}

return true;
};


//for 检测滚动条位置
function getScrollPosition(){
var position = [0, 0];
if (typeof window.pageXOffset != "undefined") {
position = [window.pageXOffset, window.pageYOffset];
//for ko,safri,firefox早期浏览器,opera;
}
else {
if (typeof document.documentElement.scrollTop != "undefined" && document.documentElement.scrollTop > 0) {
//for ie,后期firefox支持;
position = [document.documentElement.scrollLeft, document.documentElement.scrollTop];

}
else
if (typeof document.body.scrollLeft != "undefined") {
position = [document.body.scrollLeft, document.body.scrollTop];
}
}
return position;

}

//for 检测光标位置

function getCursorPosition(event){
//for ie event
if (typeof event == "undefined") {
event = window.event;
}
var scrollPostion = getScrollPosition();
// alert(scrollPostion[0]);
// alert(scrollPostion[1]);

var aCursorPosition = [0, 0];
if (typeof pageX != "undefined" && typeof event.x != "undefined") //event.x for Mac下的ie有pageX属性,但是它
//返回的值与事实不符,所以要核实一下属性x.
{
aCursorPosition[0] = event.pageX;
aCursorPosition[1] = event.pageY;
}
else {
aCursorPosition[0] = event.clientX + scrollPostion[0];
aCursorPosition[1] = event.clientY + scrollPostion[1];
}

//var oResult = document.getElementById("result");

// oResult.innerHTML = "X坐标为:" + aCursorPosition[0] + '\r' + "Y坐标为:" + aCursorPosition[1];
return true;
}

//for 查看一个元素的属性

function retrieveComputedStyle(element, styleProperty){
var computedStyle = null;

if (typeof element.currentStyle != "undefined") {
computedStyle = element.currentStyle;
}
else {
computedStyle = document.defaultView.getComputedStyle(element, null);
}

return computedStyle[styleProperty];
}


function getElePosition(theEle){
var xTheEle = 0;
var yTheEle = 0;
while (theEle != null) {
xTheEle += theEle.offsetLeft;
yTheEle += theEle.offsetTop;
theEle = theEle.offsetParent;

}
return [xTheEle, yTheEle];
}

//for 检测浏览器
function identifyBrowser(){
var agent = navigator.userAgent.toLowerCase();

if (typeof navigator.vendor != "undefined" && navigator.vendor == "KDE" && typeof window.sidebar != "undefined") {
return "kde";
}
else
if (typeof window.opera != "undefined") {
var version = parseFloat(agent.replace(/.*opera[\/ ]([^ $]+).*/, "$1"));

if (version >= 7) {
return "opera7";
}
else
if (version >= 5) {
return "opera5";
}

return false;
}
else
if (typeof document.all != "undefined") {
if (typeof document.getElementById != "undefined") {
var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/, "$1").replace(/ /, "");

if (typeof document.uniqueID != "undefined") {
if (browser.indexOf("5.5") != -1) {
return browser.replace(/(.*5\.5).*/, "$1");
}
else {
return browser.replace(/(.*)\..*/, "$1");
}
}
else {
return "ie5mac";
}
}

return false;
}
else
if (typeof document.getElementById != "undefined") {
if (navigator.vendor.indexOf("Apple Computer, Inc.") != -1) {
if (typeof window.XMLHttpRequest != "undefined") {
return "safari1.2";
}

return "safari1";
}
else
if (agent.indexOf("gecko") != -1) {
return "mozilla";
}
}

return false;
};

//for 检测操作系统


function identifyOS(){
var agent = navigator.userAgent.toLowerCase();

if (agent.indexOf("win") != -1) {
return "win";
}
else
if (agent.indexOf("mac")) {
return "mac";
}
else {
return "unix";
}

return false;
};

//for 检测event事件所指定的对象
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;
};


function addEventHandler(oTarget, sEventType, fnHandler){
if (oTarget.addEventListener) {
oTarget.addEventListener(sEventType, fnHandler, false);
}
else
if (oTarget.attachEvent) {
oTarget.attachEvent("on" + sEventType, fnHandler);
}
else {
oTarget["on" + sEventType] = fnHandler;
}
};

function removeEventHandler(oTarget, sEventType, fnHandler){
if (oTarget.removeEventListener) {
oTarget.removeEventListener(sEventType, fnHandler, false);
}
else
if (oTarget.detachEvent) {
oTarget.detachEvent("on" + sEventType, fnHandler);
}
else {
oTarget["on" + sEventType] = null;
}
};


//返回一个对象
var $ = function(id){
return "string" == typeof id ? document.getElementById(id) : id;
};
//阻止默认动作事件
function stopDefaultAction(event){
event.returnValue = false;

if (typeof event.preventDefault != "undefined") {
event.preventDefault();
}

return true;
};

//根据event返回获到到的一个对象
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;
};
//返回一个对象的位置

function getPosition(theElement){
var positionX = 0;
var positionY = 0;

while (theElement != null) {
positionX += theElement.offsetLeft;
positionY += theElement.offsetTop;
theElement = theElement.offsetParent;
}

return [positionX, positionY];
};


自己整理的公用库。持续更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值