【JavaScript 封装库】BETA 2.0 测试版发布!

来源:互联网 发布:视觉检测软件 编辑:程序博客网 时间:2024/06/11 07:37
/*源码作者: 石不易(Louis Shi)联系方式: http://www.shibuyi.net===================================================================================================程序名称: JavaScript 封装库 BETA 2.0 版迭代版本: BETA 1.0功能总数: 50 个新增总数: 6 个删除总数: 0 个追加功能: 1. 库方法: 设置与获取滚动条2. 库方法: 定位器筛选3. 库方法: 检测元素从属关系(直接从属)4. 库方法: 获取网页可视区尺寸5. 库方法: 禁止页面滚动(修正浏览器BUG)...优化功能: 1. 取消了“隶属方法”, 增加了“库方法”并与“特效”和“事件”组成集合, 封装库结构更加清晰2. 元素节点获取更加智能, 支持 class / name / tagName / id 在内的局部搜索3. 添加与删除元素节点更加方便容易, 支持 class / name / tagName / id 直接定位...删除功能: 无*/// 实例化封装库function $(_this) {return new Base(_this);}// 封装库构造方法function Base(_this) {this.elements = [];if (typeof _this == 'object' && _this !== null) this.elements.push(_this);}// 获取元素节点Base.prototype.getNodes = function () {if (this.elements.length == 0) return '没有任何节点对象';if (this.elements.length == 1) return this.elements[0];return this.elements;};// 获取 id 元素节点Base.prototype.getId = function (ids) {if (ids instanceof Array) { // 集群for (var i in ids) {this.getId(ids[i]);}} else { // 单个var node = document.getElementById(ids);if (node === null) return this;for (var i =0; i < this.elements.length; i ++) {if (this.elements[i] == node) return this;}this.elements.push(node);}return this;};// 获取 name 元素节点Base.prototype.getName = function (name, position) {var nodes = [], selector = [];if (typeof position != 'undefined') { // 局部selector = Base.positioner(position);if (selector instanceof Array) { // 集群for (var i = 0; i < selector.length; i ++) {nodes.push(selector[i].getElementsByTagName('*'));}} else { // 单个if (typeof selector == 'object') nodes = selector.getElementsByTagName('*'); // 防止 IE 无法识别 name 属性}} else { // 全局nodes = document.getElementsByName(name);}for (var i = 0; i < nodes.length; i ++) {if (typeof nodes[i].length != 'undefined' && typeof nodes[i].item != 'undefined') { // 多集群for (var j = 0; j < nodes[i].length; j ++) {if (nodes[i][j].getAttribute('name') == name) this.elements.push(nodes[i][j]);}} else { // 单集群if (nodes[i].getAttribute('name') == name) this.elements.push(nodes[i]);}}return this;};// 获取 tagName 元素节点Base.prototype.getTagName = function (tagName, position) {var nodes = [], selector = [];if (typeof position != 'undefined') { // 局部selector = Base.positioner(position);if (selector instanceof Array) { // 集群for (var i = 0; i < selector.length; i ++) {nodes.push(selector[i].getElementsByTagName(tagName));}} else { // 单个if (typeof selector == 'object') nodes = selector.getElementsByTagName(tagName); // 防止 IE 无法识别 name 属性}} else { // 全局nodes = document.getElementsByTagName(tagName);}for (var i = 0; i < nodes.length; i ++) {if (typeof nodes[i].length != 'undefined' && typeof nodes[i].item != 'undefined') { // 多集群for (var j = 0; j < nodes[i].length; j ++) {this.elements.push(nodes[i][j]);}} else { // 单集群this.elements.push(nodes[i]);}}return this;};// 获取 class 元素节点Base.prototype.getClass = function (className, position) {var nodes = [], selector = [];if (typeof position != 'undefined') { // 局部selector = Base.positioner(position);if (selector instanceof Array) { // 集群for (var i = 0; i < selector.length; i ++) {nodes.push(selector[i].getElementsByTagName('*'));}} else { // 单个if (typeof selector == 'object') nodes = selector.getElementsByTagName('*'); // 防止 IE 无法识别 name 属性}} else { // 全局nodes = $().getTagName('*').getNodes();}for (var i = 0; i < nodes.length; i ++) {if (typeof nodes[i] == 'undefined') continue; // 兼容 IE 识别空元素if (typeof nodes[i].length != 'undefined' && typeof nodes[i].item != 'undefined') { // 多集群for (var j = 0; j < nodes[i].length; j ++) {if (Base.hasClass(nodes[i][j], className)) this.elements.push(nodes[i][j]);}} else { // 单集群if (Base.hasClass(nodes[i], className)) this.elements.push(nodes[i]);}}return this;};// 获取与设置 innerHTMLBase.prototype.html = function (text) {if (typeof text != 'undefined') { // 设置for (var i = 0; i < this.elements.length; i ++) {this.elements[i].innerHTML = text;}} else { // 获取var html = [];for (var i = 0; i < this.elements.length; i ++) {html.push(this.elements[i].innerHTML);}if (html.length == 1) return html[0];return html;}return this;};// 获取与设置 value (表单)Base.prototype.value = function (text) {if (typeof text != 'undefined') { // 设置for (var i = 0; i < this.elements.length; i ++) {if (typeof this.elements[i].value != 'undefined') this.elements[i].value = text;}} else { // 获取var value = [];for (var i = 0; i < this.elements.length; i ++) {if (typeof this.elements[i].value != 'undefined') value.push(this.elements[i].value);}if (value.length == 1) return value[0];return value;}return this;};// 获取与设置 CSSBase.prototype.css = function (cssKey, cssValue) {if (typeof cssValue != 'undefined' || cssKey instanceof Array) { // 设置if (cssKey instanceof Array) { // 集群var cssPattern = /^([a-z]+)\s*=\s*([\w\(\)\'\"\\\/\-#\.=%\s]+)$/i;var _cssKey = '', _cssValue = '';for (var i = 0; i < cssKey.length; i ++) {if (cssPattern.test(cssKey[i])) {_cssKey = cssPattern.exec(cssKey[i])[1];_cssValue = cssPattern.exec(cssKey[i])[2];for (var j = 0; j < this.elements.length; j ++) {this.elements[j].style[_cssKey] = _cssValue;}}}} else { // 单个for (var i = 0; i < this.elements.length; i ++) {this.elements[i].style[cssKey] = cssValue;}}} else { // 获取var css = [];for (var i = 0; i < this.elements.length; i ++) {css.push(Tool.getStyle(this.elements[i], cssKey));}if (css.length == 1) return css[0];return css;}return this;};// 添加 class 选择器Base.prototype.addClass = function (className) {if (className instanceof Array) { // 集群for (var i = 0; i < className.length; i ++) {this.addClass(className[i]);}} else { // 单个var space = '';for (var i = 0; i < this.elements.length; i ++) {if (this.elements[i].className != '') space = ' ';if (!Base.hasClass(this.elements[i], className)) this.elements[i].className += space + className;space = '';}}return this;};// 移除 class 选择器Base.prototype.removeClass = function (className) {if (className instanceof Array) { // 集群for (var i = 0; i < className.length; i ++) {this.removeClass(className[i]);}} else { // 单个var elementNode = {};for (var i = 0; i < this.elements.length; i ++) {elementNode = this.elements[i];if (Base.hasClass(elementNode, className)) {elementNode.className = elementNode.className.replace(new RegExp('\\s+' + className + '\\s+', 'i'), ' ');elementNode.className = elementNode.className.replace(new RegExp('(\\s+|^)' + className + '($|\\s+)', 'i'), '');}}}return this;};// 添加样式规则Base.prototype.addRule = function (ruleName, ruleText, rulePosition, sheetIndex) {if (ruleName instanceof Array) { // 集群if (!ruleText instanceof Array || ruleName.length != ruleText.length) return this;for (var i = 0; i < ruleName.length; i ++) {this.addRule(ruleName[i], ruleText[i], rulePosition, sheetIndex);}} else { // 单个var rule = Base.checkRule(rulePosition, sheetIndex);if (typeof rule.sheet != 'undefined') {Tool.addRule(rule.sheet, ruleName, ruleText, rule.position);}}return this;};// 移除样式规则Base.prototype.removeRule = function (rulePosition, ruleNumber, sheetIndex) {var rule = Base.checkRule(rulePosition, sheetIndex, ruleNumber);if (typeof rule.sheet != 'undefined') {for (var i = 0; i < rule.number; i ++) {Tool.removeRule(rule.sheet, rule.position);}}return this;};/*事件集合*/// 鼠标 click 事件Base.prototype.click = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'click', method) : Tool.logoutEvent(this.elements[i], 'click', method);}}return this;};// 鼠标 mouseover 事件Base.prototype.mouseover = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'mouseover', method) : Tool.logoutEvent(this.elements[i], 'mouseover', method);}}return this;};// 鼠标 mouseout 事件Base.prototype.mouseout = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'mouseout', method) : Tool.logoutEvent(this.elements[i], 'mouseout', method);}}return this;};// 鼠标 mousedown 事件Base.prototype.mousedown = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'mousedown', method) : Tool.logoutEvent(this.elements[i], 'mousedown', method);}}return this;};// 鼠标 mousemove 事件Base.prototype.mousemove = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'mousemove', method) : Tool.logoutEvent(this.elements[i], 'mousemove', method);}}return this;};// 鼠标 mouseup 事件Base.prototype.mouseup = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'mouseup', method) : Tool.logoutEvent(this.elements[i], 'mouseup', method);}}return this;};// 鼠标 mousewheel 事件Base.prototype.mousewheel = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {Tool.mousewheel(this.elements[i], method, mode);}}return this;};// 元素 load 事件Base.prototype.load = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'load', method) : Tool.logoutEvent(this.elements[i], 'load', method);}}return this;};// 元素 scroll 事件Base.prototype.scroll = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'scroll', method) : Tool.logoutEvent(this.elements[i], 'scroll', method);}}return this;};// 窗框 resize 事件Base.prototype.resize = function (method, mode) {if (typeof mode == 'undefined') mode = true;if (typeof method == 'function') {for (var i = 0; i < this.elements.length; i ++) {mode ? Tool.loginEvent(this.elements[i], 'resize', method) : Tool.logoutEvent(this.elements[i], 'resize', method);}}return this;};/*特效集合*/// 特效: 元素隐藏Base.prototype.hide = function () {for (var i = 0; i < this.elements.length; i ++) {$(this.elements[i]).css('display', 'none');}return this;};// 特效: 元素显示Base.prototype.show = function () {for (var i = 0; i < this.elements.length; i ++) {$(this.elements[i]).css('display', 'block');}return this;};// 特效: 鼠标移入移出 (下拉菜单)Base.prototype.hover = function (overMethod, outMethod) {this.mouseover(overMethod);this.mouseout(outMethod);return this;};// 特效: 定位居中Base.prototype.center = function () {var innerRectangle = Base.getInnerRectangle();var scroll = Base.scroll();var rectangle = {}, outerX = 0, outerY = 0;for (var i = 0; i < this.elements.length; i ++) {Base.setAbsolutePosition(this.elements[i]);rectangle = Base.getRectangle(this.elements[i]);outerX = (innerRectangle.innerWidth - rectangle.width) / 2;outerY = (innerRectangle.innerHeight - rectangle.height) / 2;if (outerX < 0) outerX = 0;if (outerY < 0) outerY = 0;$(this.elements[i]).css(['left = ' + ( scroll.scrollX + outerX) + 'px', 'top = ' + (scroll.scrollY + outerY) + 'px']);}return this;};// 特效: 遮罩锁屏Base.prototype.lock = function () {var screenLock = $().getId('screenLock').getNodes();if (typeof screenLock == 'object') {if (Base.trim($(Base.commentNode(screenLock)).html()) != 0) {Base.removeElement(screenLock);screenLock = Base.addElement('div', 'id = screenLock');}} else {screenLock = Base.addElement('div', 'id = screenLock');}var scroll = Base.scroll();$(document.documentElement).css('overflow', 'hidden');Base.scroll(scroll.scrollX, scroll.scrollY);var innerRectangle = Base.getInnerRectangle();Base.setAbsolutePosition(screenLock);$(screenLock).css(['zIndex = 9998', 'left = ' + scroll.scrollX + 'px','top = ' + scroll.scrollY + 'px','width = ' + innerRectangle.innerWidth + 'px', 'height = ' + innerRectangle.innerHeight + 'px', 'backgroundColor = black','opacity = 0.4', // W3C'filter = alpha(opacity = 40)'// IE 6/7/8]).show();Base.fixed(screenLock);return this;};// 特效: 清屏销锁Base.prototype.unlock = function () {var screenLock = $().getId('screenLock').getNodes();if (typeof screenLock == 'object') {var scroll = Base.scroll();$(document.documentElement).css('overflow', 'auto');Base.scroll(scroll.scrollX, scroll.scrollY);$(screenLock).hide();}return this;};// 特效: 元素拖拽Base.prototype.drag = function (mode) {if (typeof mode == 'undefined') mode = true;var down = function (event) {_this = mode ? this : this.parentNode;Base.setAbsolutePosition(_this);if (Base.trim($(Base.commentNode(_this)).html()).length == 0) event.preventDefault();var outerRectangle = Base.getOuterRectangle(_this);var fixedX = event.clientX - outerRectangle.outerX;var fixedY = event.clientY - outerRectangle.outerY;var scroll = Base.scroll();Tool.setCaptureIE(_this);var move = function (event) {var innerRectangle = Base.getInnerRectangle();var rectangle = Base.getRectangle(_this);var outerX = event.clientX - fixedX;var outerY = event.clientY - fixedY;var minX = scroll.scrollX, minY = scroll.scrollY;var maxX = innerRectangle.innerWidth - rectangle.width + scroll.scrollX;var maxY = innerRectangle.innerHeight - rectangle.height + scroll.scrollY;if (outerX < minX) outerX = minX; else if (outerX > maxX) outerX = maxX;if (outerY < minY) outerY = minY; else if (outerY > maxY) outerY = maxY;$(_this).css(['left = ' + outerX + 'px', 'top = ' + outerY + 'px']);};$(document).mousemove(move);var up = function () {Tool.releaseCaptureIE(_this);$(document).mousemove(move, false);$(document).mouseup(up, false);};$(document).mouseup(up);};this.mousedown(down);return this;};// 特效: 禁止元素溢出Base.prototype.overflow = function () {    var scroll = Base.scroll();    var rectangle = {}, outerRectangle = {}, minX = 0, minY = 0, maxX = 0, maxY = 0, outerX = 0, outerY = 0;    var innerRectangle = Base.getInnerRectangle();    for (var i = 0; i < this.elements.length; i ++) {        Base.setAbsolutePosition(this.elements[i]);        rectangle = Base.getRectangle(this.elements[i]);        outerRectangle = Base.getOuterRectangle(this.elements[i]);        outerX = outerRectangle.outerX;        outerY = outerRectangle.outerY;        minX = scroll.scrollX;        minY = scroll.scrollY;        maxX = innerRectangle.innerWidth - rectangle.width + scroll.scrollX;        maxY = innerRectangle.innerHeight - rectangle.height + scroll.scrollY;        if (outerX < minX) outerX = minX; else if (outerX > maxX) outerX = maxX;        if (outerY < minY) outerY = minY; else if (outerY > maxY) outerY = maxY;        $(this.elements[i]).css(['left = ' + outerX + 'px', 'top = ' + outerY + 'px']);    }    return this;};/*库方法集合*/// 库方法: 重置滚动条Base.scrollInitialization = function () {Tool.scrollInitializationX();Tool.scrollInitializationY();};// 库方法: 设置与获取滚动条Base.scroll = function (x, y) {if (typeof x == 'number' && typeof y == 'number') { // 设置Tool.scrollX(x);Tool.scrollY(y);} else { // 获取return {scrollX : Tool.scrollX(),scrollY : Tool.scrollY()}}};// 库方法: 检测 class 元素节点Base.hasClass = function (elementNode, className) {if ((new RegExp('(^|\\s+)' + className + '(\\s+|$)', 'i')).test(elementNode.className)) return true;return false;};// 库方法: 检测样式规则Base.checkRule = function (rulePosition, sheetIndex, ruleNumber) {if (typeof sheetIndex == 'undefined' || isNaN(sheetIndex)) sheetIndex = 0;var sheetObject = document.styleSheets[sheetIndex];var rules = Tool.getRules(sheetObject);if (rules == 0) {rulePosition = 0;ruleNumber = 0;}if (typeof rulePosition == 'undefined' || isNaN(rulePosition)) rulePosition = 0;if (rules < rulePosition) rulePosition = rules;if (typeof ruleNumber == 'undefined' || isNaN(ruleNumber)) ruleNumber = 1;if (rules < ruleNumber) ruleNumber = rules;if (rules - rulePosition < ruleNumber) ruleNumber = rules - rulePosition;return {position : rulePosition,sheet : sheetObject,number : ruleNumber}};// 库方法: 字符串截取Base.substring = function (string, index) {if (typeof string != 'string') return string;if (string.indexOf(index) != -1) string = string.replace(index, '');return string;};// 库方法: 屏蔽两边空格Base.trim = function (string) {if (typeof string != 'string') return string;var leftPattern = /^([\s\t]+)/, rightPattern = /([\s\t]+)$/;if (leftPattern.test(string)) string = string.replace(leftPattern, '');if (rightPattern.test(string)) string = string.replace(rightPattern, '');return string;};// 库方法: 屏蔽空白文本节点Base.spaceNode = function (elementNode) {if (typeof elementNode != 'object') return elementNode;var childs = elementNode.childNodes;var pattern = /^[\s\t]+$/;for (var i = 0; i < childs.length; i ++) {if (childs[i].nodeType == 3 && pattern.test(childs[i].nodeValue)) elementNode.removeChild(childs[i]);}return elementNode;}// 库方法: 屏蔽注释节点Base.commentNode = function (elementNode) {if (typeof elementNode != 'object') return elementNode;var childs = elementNode.childNodes;var position = '';if (elementNode.id != '') {position = elementNode.id;} else if (elementNode.className != '') {position = 'class = ' + elementNode.className;} else {position = 'tagName = ' + elementNode.tagName;}var comments = $().getTagName('!', position).getNodes();if (comments instanceof Array) { // 兼容 IE for (var i = 0; i < comments.length; i ++) {elementNode.removeChild(comments[i]);}}for (var j = 0; j < childs.length; j ++) {if (childs[j].nodeType == 8) elementNode.removeChild(childs[j]);}return elementNode;};// 库方法: 定位器筛选Base.positioner = function (position) {var namePattern = /^name\s*=\s*(\w+)$/i;var tagNamePattern = /^tag(Name)?\s*=\s*(\w+)$/i;var classPattern = /^class(Name)?\s*=\s*(\w+)$/i;var idPattern = /^id\s*=\s*(\w+)$/i;var selector = [];if (namePattern.test(position)) { // nameposition = namePattern.exec(position)[1];selector = $().getName(position).getNodes();} else if (tagNamePattern.test(position)) { // tagNameposition = tagNamePattern.exec(position)[2];selector = $().getTagName(position).getNodes();} else if (classPattern.test(position)) { // classposition = classPattern.exec(position)[2];selector = $().getClass(position).getNodes();} else if (idPattern.test(position)) { // idposition = idPattern.exec(position)[1];selector = $().getId(position).getNodes();} else { // idselector = $().getId(position).getNodes();}return selector;}// 库方法: 添加属性Base.addAttribute = function (elementNode, attributes) {if (attributes instanceof Array) {for (var i = 0; i < attributes.length; i ++) {this.addAttribute(elementNode, attributes[i]);}} else {var attributePattern = /^([a-z]+)\s*=\s*([\w\-\\\/=\s\';\.:\"\)\(]+)$/i;var attributeKey = '', attributeValue = '';if (attributePattern.test(attributes)) {attributeKey = attributePattern.exec(attributes)[1];attributeValue = attributePattern.exec(attributes)[2];if (attributeKey == 'style') { // CSS IE 6/7 特殊处理var cssPattern = /^([a-z]+)\s*:\s*([\w\(\)\'\"\\\/\-#\.=%\s]+)$/i;var cssKey = '', cssValue = '';if (/(;\s*)/.test(attributeValue)) { // 集群attributeValue = attributeValue.replace(/(;\s*)/g, '|');var css = attributeValue.split('|');for (var i = 0; i < css.length; i ++) {if (cssPattern.test(css[i])) {cssKey = cssPattern.exec(css[i])[1];cssValue = cssPattern.exec(css[i])[2];$(elementNode).css(cssKey, cssValue);}}} else { // 单个if (cssPattern.test(attributeValue)) {cssKey = cssPattern(attributeValue).exec(attributeValue)[1];cssValue = cssPattern(attributeValue).exec(attributeValue)[2];$(elementNode).css(cssKey, cssValue);}}} else {elementNode.setAttribute(attributeKey, attributeValue);}}}};// 库方法: 创建元素节点Base.addElement = function (elementName, attributes, html, parentElement) {if (typeof parentElement == 'undefined' && typeof parentElement != 'string' && typeof parentElement != 'object') parentElement = document.body;if (typeof parentElement == 'string') parentElement = Base.positioner(parentElement);var elementNode = document.createElement(elementName);if (typeof html != 'undefined') $(elementNode).html(html);if (typeof attributes != 'undefined') Base.addAttribute(elementNode, attributes);if (parentElement instanceof Array) { // 集群for (var i = 0; i < parentElement.length; i ++) {parentElement[i].appendChild(elementNode);}} else { // 单个parentElement.appendChild(elementNode);}return elementNode;};// 库方法: 删除元素节点Base.removeElement = function (attributes, parentElement) {if (typeof parentElement == 'string') parentElement = Base.positioner(parentElement);if (attributes instanceof Array) { // 集群for (var i = 0; i < attributes.length; i ++) {this.removeElement(attributes[i], parentElement);}} else { // 单个elementNode = typeof attributes == 'object' ? attributes : Base.positioner(attributes);if (elementNode instanceof Array) { // 集群var sevedNode = [];for (var i = 0; i < elementNode.length; i ++) {sevedNode = elementNode;this.removeElement(elementNode[i], parentElement);elementNode = sevedNode;}} else { // 单个if (typeof parentElement == 'undefined') parentElement = elementNode.parentNode;if (parentElement instanceof Array) { // 集群for (var i = 0; i < parentElement.length; i ++) {if (typeof parentElement[i] == 'object' && Base.hasChildNode(parentElement[i], elementNode)) parentElement[i].removeChild(elementNode);}} else { // 单个if (typeof parentElement == 'object' && Base.hasChildNode(parentElement, elementNode)) parentElement.removeChild(elementNode);}}}};// 库方法: 检测元素从属关系(直接从属)Base.hasChildNode = function (parentElement, elementNode) {var childs = parentElement.childNodes;for (var i = 0; i < childs.length; i ++) {if (childs[i] == elementNode) return true;}return false;};// 库方法: 获取元素大小尺寸Base.getRectangle = function (elementNode) {var width = 0, height = 0, display = '', _this = {};_this = $(elementNode);width = _this.css('width');height = _this.css('height');display = _this.css('display');if (width == 'auto' || height == 'auto') {if (display == 'none') _this.show();width = elementNode.offsetWidth;height = elementNode.offsetHeight;}width = this.substring(width, 'px');height = this.substring(height, 'px');return {width : width,height : height};};// 库方法: 获取元素外边距尺寸Base.getOuterRectangle = function (elementNode) {this.setAbsolutePosition(elementNode);var outerX = 0, outerY = 0, display = '', _this = {};_this = $(elementNode);outerX = _this.css('left');outerY = _this.css('top');display = _this.css('display');if (outerX == 'auto' || outerY == 'auto') {if (display == 'none') _this.show();outerX = elementNode.offsetLeft;outerY = elementNode.offsetTop;}outerX = this.substring(outerX, 'px');outerY = this.substring(outerY, 'px');return {outerX : outerX,outerY : outerY};};// 库方法: 获取网页可视区尺寸Base.getInnerRectangle = function () {var innerWidth = Tool.getInnerWidth();var innerHeight = Tool.getInnerHeight();return {innerWidth : innerWidth,innerHeight : innerHeight};};// 库方法: 设置元素绝对定位Base.setAbsolutePosition = function (elementNode) {if ($(elementNode).css('position') != 'absolute') {$(elementNode).css(['position = absolute', 'left = 0', 'top = 0']);}};// 库方法: 禁止页面滚动(修正浏览器BUG)Base.fixed = function (elementNode) {// IE 禁止方式$(elementNode).mousedown(function () {$(elementNode).mousemove(function (event) {event.preventDefault();});});// Chrome 禁止方式$(elementNode).mousewheel(function (event) {event.preventDefault();});};

/*源码作者: 石不易(Louis Shi)联系方式: http://www.shibuyi.net===================================================================================================程序名称: JavaScript 工具库(跨浏览器兼容) BETA 2.0 版迭代版本: BETA 1.0功能总数: 18 个新增总数: 3 个删除总数: 2 个追加功能: 1. 跨浏览器检测元素从属关系(直接从属+间接从属)2. 跨浏览器获取与设置滚动条(x轴+y轴)...优化功能: 1. 跨浏览器现代事件绑定(注册事件+注销事件)2. 跨浏览器配备事件对象(IE 6/7/8 专属)...删除功能: 1. 跨浏览器取消事件冒泡2. 跨浏览器取消事件默认行为...*/// 工具库var Tool = {// 数组排序sort : function () {return {minToMax : function (min, max) { // 正序: 从小到大if (min < max) {return -1;} else if (min > max) {return 1;} else {return 0;}},maxToMin : function (min, max) { // 倒序: 从大到小if (min < max) {return 1;} else if (min > max) {return -1;} else {return 0;}}}},// 跨浏览器获取计算后的 CSS 样式getStyle : function (elementNode, cssKey) {if (typeof window.getComputedStyle != 'undefined') { // W3Creturn window.getComputedStyle(elementNode, null)[cssKey];} else if (typeof elementNode.currentStyle != 'undefined') { // IE 6/7/8return elementNode.currentStyle[cssKey];}},// 跨浏览器添加样式规则addRule : function (sheet, ruleName, ruleText, rulePosition) {if (typeof sheet.insertRule != 'undefined') { // W3Csheet.insertRule(ruleName + ' {' + ruleText + '}', rulePosition);} else if (typeof sheet.addRule != 'undefined') { // IE 6/7/8sheet.addRule(ruleName, ruleText, rulePosition);}},// 跨浏览器移除样式规则removeRule : function (sheet, rulePosition) {if (typeof sheet.deleteRule != 'undefined') { // W3Csheet.deleteRule(rulePosition);} else if (typeof sheet.removeRule != 'undefined') { // IE 6/7/8sheet.removeRule(rulePosition);}},// 跨浏览器获取样式规则总数getRules : function (sheet) {if (typeof sheet.cssRules != 'undefined') { // W3Creturn sheet.cssRules.length;} else if (typeof sheet.rules != 'undefined') { // IE 6/7/8return sheet.rules.length;}},// 事件绑定计数器eventId : 0,// 跨浏览器现代事件绑定: 注册事件loginEvent : function (elementNode, eventName, method) {if (eventName.indexOf('on') == 0) eventName = eventName.substring(2, eventName.length);if (typeof elementNode.addEventListener != 'undefined') { // W3CelementNode.addEventListener(eventName, method, false);} else if (typeof elementNode.attachEvent != 'undefined') { // IE 6/7/8// 创建哈希表,存储事件数组if (typeof elementNode.hashTable != 'object') elementNode.hashTable = {};// 创建事件数组,储存事件方法if (typeof elementNode.hashTable[eventName] != 'object') elementNode.hashTable[eventName] = [];// 获取事件数组var events = elementNode.hashTable[eventName];// 检测同一节点、同一事件是否方法重复for (var i = 0; i < events.length; i ++) {if (events[i] == method) return false;}// 储存事件方法events[this.eventId ++] = method;var _this = this;// 执行事件方法elementNode['on' + eventName] = function () {var event = _this.eventIE(window.event);for (var i = 0; i < events.length; i ++) {if (typeof events[i] != 'undefined') events[i].call(this, event);}};}},// 跨浏览器现代事件绑定: 注销事件logoutEvent : function (elementNode, eventName, method) {if (eventName.indexOf('on') == 0) eventName = eventName.substring(2, eventName.length);if (typeof elementNode.removeEventListener != 'undefined') { // W3CelementNode.removeEventListener(eventName, method, false);} else if (typeof elementNode.detachEvent != 'undefined') { // IE 6/7/8if (typeof elementNode.hashTable != 'undefined' && typeof elementNode.hashTable[eventName] != 'undefined') {var events = elementNode.hashTable[eventName];for (var i = 0; i < events.length; i ++) {if (events[i] == method) delete events[i];}}}},// 跨浏览器配备事件对象(IE 6/7/8 专属)eventIE : function (event) {// 配备取消事件冒泡event.stopPropagation = function () {event.cancelBubble = true;};// 配备取消事件默认行为event.preventDefault = function () {event.returnValue = false;};// 配备获取事件绑定对象event.target = event.srcElement;return event;},// 跨浏览器鼠标滚轮(中键)事件mousewheel : function (elementNode, method, mode) {if (typeof elementNode.onmousewheel != 'undefined') { // 非 Firefoxmode ? this.loginEvent(elementNode, 'mousewheel', method) : this.logoutEvent(elementNode, 'mousewheel', method);} else { // Firefoxmode ? this.loginEvent(elementNode, 'DOMMouseScroll', method) : this.logoutEvent(elementNode, 'DOMMouseScroll', method);}},// 跨浏览器检测元素从属关系(直接从属+间接从属)hasChildNode : function (parentElement, elementNode) {if (typeof parentElement.contains != 'undefined') { // W3Creturn parentElement.contains(elementNode);} else if (typeof parentElement.compareDocumentPosition != 'undefined') { // 低版本浏览器return parentElement.compareDocumentPosition(elementNode) == 20;}return false;},// 跨浏览器获取网页可视区宽度尺寸getInnerWidth : function () {if (typeof window.innerWidth != 'undefined') { // W3Creturn window.innerWidth;} else { // IE 6/7/8return document.documentElement.clientWidth;}},// 跨浏览器获取网页可视区高度尺寸getInnerHeight : function () {if (typeof window.innerHeight != 'undefined') { // W3Creturn window.innerHeight;} else { // IE 6/7/8return document.documentElement.clientHeight;}},// 跨浏览器重置横向窗体滚动条scrollInitializationX : function () {this.scrollX(0);},// 跨浏览器重置纵向窗体滚动条scrollInitializationY : function () {this.scrollY(0); },// 跨浏览器获取与设置滚动条X轴scrollX : function (x) {if (typeof x != 'undefined') { // 设置document.documentElement.scrollLeft = x; // 非 Chrome / Safaridocument.body.scrollLeft = x; // Chrome / Safari} else { // 获取return document.documentElement.scrollLeft == 0 ? document.body.scrollLeft : document.documentElement.scrollLeft;}},// 跨浏览器获取与设置滚动条Y轴scrollY : function (y) {if (typeof y != 'undefined') { // 设置document.documentElement.scrollTop = y; document.body.scrollTop = y;} else { // 获取return document.documentElement.scrollTop == 0 ? document.body.scrollTop : document.documentElement.scrollTop;}},// IE 专属事件: 浏览器外捕获鼠标按下setCaptureIE : function (elementNode) {if (typeof elementNode.setCapture != 'undefined') { // IEelementNode.setCapture();}},// IE 专属事件: 浏览器外捕获鼠标弹起releaseCaptureIE : function (elementNode) {if (typeof elementNode.releaseCapture != 'undefined') { // IEelementNode.releaseCapture();}}};

关于 BETA 2.0 测试版核心源码与实例演示的获取请移动至官网下载!


感谢大家积极评测给予意见!


官网地址:http://www.shibuyi.net

CNBlogs 博客: http://www.cnblogs.com/shibuyi/

CSDN 博客:http://blog.csdn.net/louis_shi/

ITeye 博客:http://shibuyi.iteye.com/

0 0
原创粉丝点击