JavaScript常用函數(shù)的封裝

  • 選擇器的封裝
//參數(shù)選擇器名稱,返回值: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兼容函數(shù)的封裝
//返回值: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
    }
}
  • 勻速運動函數(shù)的封裝
//參數(shù):dom對象,目標(biāo)位置
function animate(obj, target) {
    clearInterval(obj.timer);  // 先清除定時器
    var speed = obj.offsetLeft < target ? 10 : -10;  // 用來判斷 應(yīng)該 +  還是 -
    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像素差距   我們直接跳轉(zhuǎn)目標(biāo)位置
        }
    }, 10)
}
  • 可視區(qū)域大小函數(shù)的封裝
//返回值width,height
function client() {
    if (window.innerWidth != null)  // ie9 +  最新瀏覽器
    {
        return {
            width: window.innerWidth,
            height: window.innerHeight
        }
    }
    else if (document.compatMode === "CSS1Compat")  // 標(biāo)準瀏覽器
    {
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight
        }
    }
    return {   // 怪異瀏覽器
        width: document.body.clientWidth,
        height: document.body.clientHeight

    }
}
  • 緩動動畫函數(shù)的封裝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)
}
  • 獲取樣式函數(shù)的封裝
function getStyle(obj, attr) {
    if (obj.currentStyle) {
        return obj.currentStyle[attr];
    } else {
        return window.getComputedStyle(obj, null)[attr];
    }
}
  • 多動畫函數(shù)的封裝
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)
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市大咱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刑然,老刑警劉巖武花,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異冰肴,居然都是意外死亡勺拣,警方通過查閱死者的電腦和手機奶赠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來药有,“玉大人毅戈,你說我怎么就攤上這事》叨瑁” “怎么了苇经?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長宦言。 經(jīng)常有香客問我扇单,道長,這世上最難降的妖魔是什么奠旺? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任蜘澜,我火速辦了婚禮施流,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鄙信。我一直安慰自己瞪醋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布装诡。 她就那樣靜靜地躺著银受,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸦采。 梳的紋絲不亂的頭發(fā)上宾巍,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音渔伯,去河邊找鬼顶霞。 笑死,一個胖子當(dāng)著我的面吹牛咱旱,可吹牛的內(nèi)容都是我干的确丢。 我是一名探鬼主播绷耍,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吐限,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褂始?” 一聲冷哼從身側(cè)響起诸典,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崎苗,沒想到半個月后狐粱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡胆数,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年肌蜻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片必尼。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒋搜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出判莉,到底是詐尸還是另有隱情豆挽,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布券盅,位于F島的核電站帮哈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锰镀。R本人自食惡果不足惜娘侍,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一咖刃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧憾筏,春花似錦僵缺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至容贝,卻和暖如春自脯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背斤富。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工膏潮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人满力。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓焕参,卻偏偏與公主長得像,于是被迫代替她去往敵國和親油额。 傳聞我的和親對象是個殘疾皇子叠纷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • offset家族三大家族和一個事件對象三大家族(offset/scroll/client)事件對象/event ...
    Yuann閱讀 960評論 0 5
  • 1.感恩王總這么多年對李浩的照顧。認識這么多年潦嘶,平時很少聯(lián)系涩嚣,有事都會幫忙,感恩這樣靠譜的朋友掂僵。 2.感恩老公航厚,出...
    玄寶貝閱讀 138評論 0 0
  • 豈止是藝術(shù)家孤獨 人 生來都是一個人來 一個人去 那墻角數(shù)枝梅 凌寒獨自開放 不早不晚 不慌不忙 全然不知路上發(fā)生...
    H2瓷熹閱讀 287評論 0 0
  • 盛夏也有收獲的時光。 盛夏更有幸福的時刻锰蓬。 七月的長樂園幔睬,花紅葉綠,一片茂盛芹扭。許多果實麻顶,雖未及累累,卻漸已成熟冯勉,比...
    枯荷聽雨hx閱讀 849評論 11 14
  • 成功創(chuàng)造需求的6大關(guān)鍵 本部分包含2-7章澈蚌,對于成功創(chuàng)造需求的六個要素分別進行描述整體上更多是通過案列的分析來說明...
    明慢慢閱讀 621評論 2 5