JavaScript常用函数的封装

  • 选择器的封装
//参数选择器名称,返回值:dom对象
function getClass(className)   //  类的写法
{
    //判断支持否
    if (document.getElementsByClassName) {
        return document.getElementsByClassName(className);
    }
    var arr = [];
    var dom = document.getElementsByTagName("*");
    for (var i = 0; i < dom.length; i++) {
        var txtarr = dom[i].className.split(" ");

        for (var j = 0; j < txtarr.length; j++) {
            if (txtarr[j] == className) {
                arr.push(dom[i]);
            }
        }
    }
    return arr;
}

function $(str) {
    var tag = str.charAt(0);
    var id = str.substr(1);  // demo
    switch (tag) {
        case "#":
            return document.getElementById(id);
        case ".":
            return getClass(id);
        default:
            return document.getElementsByTagName(str);
    }
}

  • scroll兼容函数的封装
//返回值:left,top
function scroll() {
    //IE9+ 和其他浏览器 
    if (window.pageYOffset != null) {
        return {
            left: window.pageXOffset,
            top: window.pageYOffset
        }
    }
    //不是怪异模式 有DTD的
    else if (document.compatMode == "CSS1Compat") {
        return {
            left: document.documentElement.scrollLeft,
            top: document.documentElement.scrollTop
        }
    }
    //谷歌浏览器和怪异模式
    return {
        left: document.body.scrollLeft,
        top: document.body.scrollTop
    }
}
  • 匀速运动函数的封装
//参数:dom对象,目标位置
function animate(obj, target) {
    clearInterval(obj.timer);  // 先清除定时器
    var speed = obj.offsetLeft < target ? 10 : -10;  // 用来判断 应该 +  还是 -
    obj.timer = setInterval(function () {
        var result = target - obj.offsetLeft; // 因为他们的差值不会超过5
        obj.style.left = obj.offsetLeft + speed + "px";
        if (Math.abs(result) <= 5)  // 如果差值不小于 5 说明到位置了
        {
            clearInterval(obj.timer);
            obj.style.left = target + "px";  // 有5像素差距   我们直接跳转目标位置
        }
    }, 10)
}
  • 可视区域大小函数的封装
//返回值width,height
function client() {
    if (window.innerWidth != null)  // ie9 +  最新浏览器
    {
        return {
            width: window.innerWidth,
            height: window.innerHeight
        }
    }
    else if (document.compatMode === "CSS1Compat")  // 标准浏览器
    {
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight
        }
    }
    return {   // 怪异浏览器
        width: document.body.clientWidth,
        height: document.body.clientHeight

    }
}
  • 缓动动画函数的封装v2
function animate2(obj, target) {
    clearInterval(obj.timer)
    obj.timer = setInterval(function () {
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        obj.style.left = obj.offsetLeft + step + "px";
        if (obj.offsetLeft === target) {
            clearInterval(obj.timer)
        }
    }, 10)
}
  • 获取样式函数的封装
function getStyle(obj, attr) {
    if (obj.currentStyle) {
        return obj.currentStyle[attr];
    } else {
        return window.getComputedStyle(obj, null)[attr];
    }
}
  • 多动画函数的封装
function animate3(obj, json, fn) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
        var flag = true;
        for (var attr in json) {
            var current = parseInt(getStyle(obj, attr));
            var step = (json[attr] - current) / 10;
            step = step > 0 ? Math.ceil(step) : Math.floor(step);

            if (attr == "opacity") {
                if ("opacity" in obj.style) {
                    obj.style.opacity = json[attr];
                } else {
                    obj.style.filter = "alpha(opacity=" + json[attr] * 100 + ")";
                }
            } else {
                obj.style[attr] = current + step + "px";
            }

            if (current != json[attr]) {
                flag = false;
            }
        }
        if (flag) {
            clearInterval(obj.timer);
            if (fn) {
                fn();
            }
        }
    }, 10)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • offset家族三大家族和一个事件对象三大家族(offset/scroll/client)事件对象/event ...
    Yuann阅读 4,576评论 0 5
  • 1.感恩王总这么多年对李浩的照顾。认识这么多年,平时很少联系,有事都会帮忙,感恩这样靠谱的朋友。 2.感恩老公,出...
    玄宝贝阅读 1,292评论 0 0
  • 岂止是艺术家孤独 人 生来都是一个人来 一个人去 那墙角数枝梅 凌寒独自开放 不早不晚 不慌不忙 全然不知路上发生...
    H2瓷熹阅读 2,463评论 0 0
  • 盛夏也有收获的时光。 盛夏更有幸福的时刻。 七月的长乐园,花红叶绿,一片茂盛。许多果实,虽未及累累,却渐已成熟,比...
    枯荷听雨hx阅读 4,379评论 11 14
  • 成功创造需求的6大关键 本部分包含2-7章,对于成功创造需求的六个要素分别进行描述整体上更多是通过案列的分析来说明...
    明慢慢阅读 3,848评论 2 5

友情链接更多精彩内容