资讯专栏INFORMATION COLUMN

JavaScript常用脚本集锦4

yeooo / 3114人阅读

摘要:一些元素位置设置的通用方法查找元素的左端位置代码依赖来自查找元素的顶端位置设置元素和位置与当前位置无关的一对函数设置元素水平的函数设置元素垂直位置的函数在元素的水平位置上增加像素距离的函数在元素的垂直位置上增加像素距离的函数代码来源元素相对

一些元素位置设置的通用方法
/**
 * 查找元素的左端位置,
 * 代码依赖:getStyle来自 https://gist.github.com/hehongwei44/9abf63536accd0f2eeb7
 * */

function posX(elem) {
    return parseInt(getStyle(elem, "left"));
}
/**
 * 查找元素的顶端位置
 * */

function posY(elem) {
    return parseInt(getStyle(elem, "top"));
}

/*设置元素x和y位置(与当前位置无关)的一对函数*/
/**
 * 设置元素水平的函数
 * */
function setX(elem, pos) {
    elem.style.left = pos + "px";
}

/**
 * 设置元素垂直位置的函数
 * */
function setY(elem, pos) {
    elem.style.top = pos + "px";
}

/**
 * 在元素的水平位置上增加像素距离的函数
 * */
function addX(elem, pos) {
    setX(posX(elem) + pos);
}
/**
 * 在元素的垂直位置上增加像素距离的函数
 * */
function addY(elem, pos) {
    setY(posY(elem) + pos);
}

代码来源:https://gist.github.com/hehongwei44/7f0eca7c0a0ae19adc9f

元素相对于整个父亲节点的left和top的辅助函数
/**
 * 元素elem相对于父亲元素的左端和顶端的位置
 * 依赖脚本:https://gist.github.com/hehongwei44/8d33a6e35ee045722e75
 * */

/**
 * 获取元素相对于父亲元素的水平位置
 * */
function parentX(elem) {
    /**
     * 如果offsetParent是元素的父亲,那么提前提出
     * 否则,我们需要找到元素和元素的父亲相对于整个页面位置,并计算他们之间的差
     * */
    return elem.parentNode == elem.offsetParent ? elem.offsetLeft : pageX(elem) - pageX(elem.parentNode);
}

/**
 * 获取元素相对于父亲元素的顶端位置
 *
 * */
function parentY(elem) {
    /**
     * 如果offsetParent是元素的父亲,那么提前提出
     * 否则,我们需要找到元素和元素的父亲相对于整个页面位置,并计算他们之间的差
     * */
    return elem.parentNode == elem.offsetParent ? elem.offsetTop : pageY(elem) - pageY(elem.parentNode);
}

代码来源:https://gist.github.com/hehongwei44/d8530ae974b1aabbab55

元素相对于整个文档的left和top的辅助函数
/*元素elem相对于整个文档的左端和顶端的位置*/

/**
 * 获取元素的水平位置
 * */
function pageX(elem) {
    /**
     * 参看我们是否位于根元素
     * 如果我们能继续得到上一个元素,增加当前偏移量并继续向下递归.
     * 否则,获取当前的偏移量.
     * */
    return elem.offsetParent ? elem.offsetLeft + pageX(elem.offsetParent) : elem.offsetLeft;
}

/**
 * 获取元素的顶端位置
 *
 * */
function pageY(elem) {
    /**
     * 参看我们是否位于根元素
     * 如果我们能继续得到上一个元素,增加当前偏移量并继续向下递归.
     * 否则,获取当前的偏移量.
     */
    return elem.offsetParent ? elem.offsetTop + pageY(elem.offsetParent) : elem.offsetTop;
}

代码来源:https://gist.github.com/hehongwei44/8d33a6e35ee045722e75

事件模型的封装
/**
 *
 * @author Dean Edwards
 * @date 2005/10
 * @link http://dean.edwards.name/weblog/2005/10/add-event/
 * @transform  https://github.com/hehongwei44
 * @compatibility IE6+ ,FF, chrome
 *
 * */

 //调用方式->addEvent(window, "load", function(){})
function addEvent(element, type, handler) {
    //如果浏览器原生支持W3C的标准行为addEventListener函数,则直接绑定函数句柄.
    if (element.addEventListener) {
        //flase表示不支持事件捕捉,主流浏览器都支持该标准,IE9+
        element.addEventListener(type, handler, false);
    } else {
        // 为每一个事件句柄赋值一个独立的ID,addEvent.guid的初始值为1.
        if (!handler.$$guid) handler.$$guid = addEvent.guid++;
        // 为元素建立一个事件类型的散列表
        if (!element.events) element.events = {};
        // 为每对元素/事件建立一个事件处理函数的散列表
        var handlers = element.events[type];

        if (!handlers) {

            handlers = element.events[type] = {};
            // 存储已有的事件处理函数(如果已存在一个),ps:用来特殊处理"on+type"的类型事件.
            if (element["on" + type]) {
                handlers[0] = element["on" + type];
            }
        }
        // 在散列表中存储该事件的处理函数.
        handlers[handler.$$guid] = handler;
        // 赋以一个全局事件处理函数来处理所有的工作
        element["on" + type] = handleEvent;
    }
}
// 创建独立ID的计数器
addEvent.guid = 1;

function removeEvent(element, type, handler) {
    if (element.removeEventListener) {
        element.removeEventListener(type, handler, false);
    } else {
        // 从散列表中删除事件处理函数
        if (element.events && element.events[type]) {
            delete element.events[type][handler.$$guid];
        }
    }
}
//事件处理函数
function handleEvent(event) {
    var returnValue = true;
    // 获取事件对象(IE使用全局事件对象)
    event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
    // 获取事件处理函数散列表的引用.
    var handlers = this.events[event.type];
    // 依次执行每个事件处理函数
    for (var i in handlers) {
        this.$$handleEvent = handlers[i];
        //执行回调函数
        if (this.$$handleEvent(event) === false) {
            returnValue = false;
        }
    }
    return returnValue;
}

//重新包装event对象,使其兼容IE和W3C标准.
function fixEvent(event) {
    // 增加W3C标准事件方法.
    event.preventDefault = fixEvent.preventDefault;
    event.stopPropagation = fixEvent.stopPropagation;
    return event;
}
//IE浏览器阻止默认行为的方式
fixEvent.preventDefault = function () {
    //this指向event对象
    this.returnValue = false;
}
//IE浏览器阻止冒泡的方式
fixEvent.stopPropagation = function () {
    //this指向event对象
    this.cancelBubble = true;
};

代码来源:https://gist.github.com/hehongwei44/3c9ec099751f8f2e197e

阻止事件冒泡和默认行为的通用函数
/**
 * 阻止事件冒泡的通用函数
 * */
function stopBubble(e) {
    if (e && e.stopPropagation) {
        e.stopPropagation();
    } else {
        window.event.cancelBubble = true;
    }
}

/**
 * 防止发生默认浏览器行为的通用函数
 * */
function stopDefault(e) {
    if (e && e.preventDefault) {
        e.preventDefault();
    } else {
        window.event.returnValue = false;
    }
    return false;
}

代码来源:https://gist.github.com/hehongwei44/5fb2134a70ab8379849e

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87693.html

相关文章

  • JavaScript常用脚本集锦2

    摘要:把中的伪数组转换为真数组在中,函数中的隐藏变量和用获得的元素集合都不是真正的数组,不能使用等方法,在有这种需要的时候只能先转换为真正的数组。检测元素是否支持某个属性代码用法创建和使用命名空间使用方式 把JavaScript中的伪数组转换为真数组 在 JavaScript 中, 函数中的隐藏变量 arguments 和用 getElementsByTagName 获得的元素集合(Nod...

    xialong 评论0 收藏0
  • JavaScript常用脚本集锦5

    摘要:代码来源一些常用的操作方法介绍查找相关元素的前一个兄弟元素的方法。查找元素指定层级的父元素。 DOM操作的增强版功能函数 /** * 将一个DOM节点、HTML字符串混合型参数 * 转化为原生的DOM节点数组 * * */ function checkElem(a) { var r = []; if (a.constructor != Array) { ...

    joywek 评论0 收藏0
  • JavaScript常用脚本集锦8

    摘要:进制为代码来源通过标签解析通过标签解析标签参数是字符串,解析的目标通过测试创建一个标签将赋值给标签的属性。协议主机名称端口查询字符串查询参数文件名哈希参数路径相对路径路径片段代码来源 图片预加载 // 更新: // 05.27: 1、保证回调执行顺序:error > ready > load;2、回调函数this指向img本身 // 04-02: 1、增加图片完全加载后的回调 2、提...

    blankyao 评论0 收藏0
  • JavaScript常用脚本集锦3

    通过数组,拓展字符串拼接容易导致性能的问题 function StringBuffer() { this.__strings__ = new Array(); } StringBuffer.prototype.append = function (str) { this.__strings__.push(str); return this; } StringBuffer....

    dack 评论0 收藏0
  • JavaScript常用脚本集锦6

    摘要:它会指出一个类是继承自另一个类的。测试测试代码来源页面倒计时的一段运用倒计时的一段脚本。截止日期符合日期格式,比如等有效日期。截止的天数小时分钟秒数组成的对象。 清楚节点内的空格 function cleanWhitespace(element) { //如果不提供参数,则处理整个HTML文档 element = element || document; //...

    Acceml 评论0 收藏0

发表评论

0条评论

yeooo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<