当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0

Javascript
实现表格中行点击时的渐扩效果!
多图展示滑动过渡效果
弹出自适应图片大小的窗口弹出窗口根据图片大小,自动判断高和宽。
拖动Html元素集合 Drag and Drop any item
脚本吧 - 幻宇工作室用到js,超强推荐base.js
使用透明叠加法美化文件上传界面
JavaScript高级程序设计
对象的类型:本地对象(1)
如何实现表格中行点击时的渐扩效果!
使用button标签,实现三态图片按钮
根据分辩率调用不同的CSS.
Web版彷 Visual Studio 2003 颜色选择器
JS中简单的实现像C#中using功能(有源码下载)
js之WEB开发调试利器:Firebug 下载
jQuery中文入门指南,翻译加实例,jQuery的起点教程
jQuery 1.0.4 - New Wave Javascript(js源文件)
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
换肤测试程序js脚本
xWin之JS版(2-26更新)
共享自己写一个框架DreamScript

Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 304 ::
收藏到网摘: n/a

继续在 YAHOO.util.Dom 中徘徊。由于 YAHOO.util.Dom 多次调用 batch 方法,所以先看看这个函数是怎么写的。有关 batch 的用法,可以参见这里,相关的代码如下 batch: function(el, method, o, override) {
// 让 el 始终为 HTMLElement
el = (el && (el.tagName || el.item)) ? el : Y.Dom.get(el);
if (!el || !method) {
return false;
}
// 确定返回的对象
var scope = (override) ? o : window;
// 看起来是个 HTMLElement 或者不是 Array
if (el.tagName || el.length === undefined) {
return method.call(scope, el, o);
}
var collection = [];
for (var i = 0, len = el.length; i < len; ++i) {
collection[collection.length] = method.call(scope, el[i], o);
}
return collection;
},小马补充
batch 是 YUI Dom 库的核心之一。它最大的意义在于,它让 Dom 库的其他大多方法
的第一个参数可以是一个 id / 元素对象 或 一组 id/元素对象,减少了循环的使用。在这里可以找到 call 与 apply 的用法。在了解了 batch 以后,下来看 YUI.util.Dom 是怎么使用这一方法的,一口气看两个函数
getStyle: function(el, property) {
// toCamel 函数后面介绍
property = toCamel(property);
// 获取节点的样式
var f = function(element) {
return getStyle(element, property);
};
return Y.Dom.batch(el, f, Y.Dom, true);
},setStyle: function(el, property, val) {
property = toCamel(property);
// 设置节点的样式
var f = function(element) {
setStyle(element, property, val);
};
Y.Dom.batch(el, f, Y.Dom, true);
},有关这两个函数的具体用法,可以看下相关的文档。其实从参数上就很容易理解怎么使用。看上面的两个函数有利于理解 YAHOO.util.Dom.batch 的调用方式。
接下来,粗略看下 getXY
getXY: function(el) {
var f = function(el) {
// 确定元素是否“肉眼可见”
if ( (el.parentNode === null || el.offsetParent === null ||
this.getStyle(el, 'display') == 'none') &&
el != el.ownerDocument.body) {
return false;
}
return getXY(el);
};
return Y.Dom.batch(el, f, Y.Dom, true);
},getX 与 getY 方法也是调用此函数,只是获取返回值的数组元素不一样。由于浏览器的兼容问题,提供给用户的 YAHOO.util.Dom.getXY 也仅仅是判断变量以后,再扔给最为复杂的内部 getXY 函数。
OK,留下太多的“悬念”了,下一期着重将它们解决。