【轉(zhuǎn)自CSDN】JS常見代碼塊,持續(xù)更新......

JS常見代碼塊,持續(xù)更新......

https://blog.csdn.net/real_bird/article/details/55510296
2017年02月17日 19:18:13 睡在我下鋪的上鋪的胖子 閱讀數(shù) 1095

版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載绑莺。 https://blog.csdn.net/Real_Bird/article/details/55510296

個人使用過程中收集的…弄丟了幾次,現(xiàn)在放到博客惕耕,更新中……

1纺裁、拿到總的offsetLeft

function getOffsetLeft(dom){
  var actualLeft = dom.offsetLeft;
  var curr = dom.offsetParent;

  while(curr){
    actualLeft += curr.offsetLeft;
    curr = curr.offsetParent;
  }

  return actualLeft;
}

2、拿到總的offsetTop

function getOffsetTop(dom){
  var actualTop = dom.offsetTop;
  var curr = dom.offsetParent;

  while(curr){
    actualTop += curr.offsetTop;
    curr = curr.offsetParent;
  }

  return actualTop;
}

3司澎、添加事件處理程序兼容性寫法 ie8及之前

//Dom0級事件處理程序 動態(tài)綁定 btn.onclinck = function(){this === btn};

/*使用attachEvent方法時欺缘,
    1...事件處理程序在全局作用域運行,this等于window挤安;
    2...添加多個時谚殊,按相反順序執(zhí)行
    3...必須加on
*/

function addHandle(dom,type,handle){
    if(dom.addEventListener){
        dom.addEventListener(type,handle,false);
    }else if(dom.attachEvent){
        dom.attachEvent("on"+type,handle);
    }else{//DOM0級
        dom["on"+type] = handle;
    }
}

4、移除事件處理程序

function removeHandle(dom,type,handle){
    if(dom.removeEventListener){
        dom.removeEventListener(type,handle);
    }else if(dom.detachEvent){
        dom.detachEvent("on"+type,handle)
    }else{
        dom["on"+type] = null;
    }
}

5蛤铜、拿到事件對象

function getEvent(event){
    return event || window.event;
}

6嫩絮、拿到真正的目標而非冒泡目標

function getTarget(event){
    return event.target || event.srcElement;//兼容老版本ie
}

7、阻止默認行為

function preventDefault(event){
    if(event.preventDefault){
        event.preventDefault();
    }else{
        event.returnValue = false;//兼容老版本ie
    }
}

8围肥、停止冒泡

function stopPropagation(event){
    if(event.stopPropagation){
        event.stopPropagation();
    }else{
        event.cancelBubble = true;
    }
}

9剿干、設(shè)置光標的位置

function setCaretPosition(ctrl, pos){
    if(ctrl.setSelectionRange)
    {
        ctrl.focus();
        ctrl.setSelectionRange(pos,pos);
    }
    else if (ctrl.createTextRange) {
        var range = ctrl.createTextRange();
        range.collapse(true);
        range.moveEnd('character', pos);
        range.moveStart('character', pos);
        range.select();
    }
}

10、在光標的位置插入值

function insertText(obj,text){
    if(document.selection){
        var sel = document.selection.createRange();//返回 TextRange 或 ControlRange 對象
        sel.text = text;
    }else if(typeof obj.selectionStart === 'number' && typeof obj.selectionEnd === 'number'){
        var startPos = obj.selectionStart;//選中的開始位置
        var endPos = obj.selectionEnd;//選中的結(jié)束位置
        var cursorPos = startPos;//光標的開始位置 和選中的開始位置相同
        var tempStr = obj.value;//拿到對象的值  textarea中的值

        obj.value = tempStr.substring(0,startPos) + text + tempStr.substring(endPos,tempStr.length);//把text插入到光標位置
        cursorPos += str.lenth;//更新光標的值
        obj.selectionStart = obj.selectionEnd = cursorPos;//將光標放到正確位置
    }else{
        obj.value += str;
    }
}

11虐先、拿到對象的css屬性

function getStyle(dom,cssAttr){
    return window.getComputedStyle ? window.getComputedStyle(dom,null)[cssAttr] : dom.currentStyle[cssAttr];
}

12怨愤、move動畫,涉及px的屬性蛹批,包括透明度

function move(dom,json,callback){
    clearInterval(dom.timer);//每一次move之前都要清除動畫撰洗。否則一個leave后沒清動畫,下一個無法onmouseover
    dom.timer = setInterval(function(){
        //每30秒執(zhí)行一遍所有的attr屬性腐芍,和if(mark)
        var mark = true;//設(shè)置mark--是因為有多個屬性差导。多個屬性同時滿足條件,才執(zhí)行if(mark)
        for(var attr in json){
            var cur = 0;
            if(attr == "opacity"){
                cur = getStyle(dom,attr) * 100;//乘以100是為了方便改變speed
            }else{
                var cur = parseInt(getStyle(dom,attr)) || 0;//如果沒設(shè)置屬性默認讓它為0
            }
            var target =json[attr];//move的目標
            var speed = (target - cur) * 0.5;//速度的絕對值一直在減小
            speed = (speed > 0) ? Math.ceil(speed) : Math.floor(speed);//太小了為+-1
            if(target > cur){//從小變到大的時候猪勇,還沒完成
                mark = false;//直到三個都相等mark才是true
                cur += speed;//cur網(wǎng)target改變
                if(cur >= target){//不小心超過了设褐,就等于target
                    cur = target;
                }

            }else if(cur > target){//從大變小 json[attr] < cur
                mark = false;
                cur += speed;
                if(cur <= target){
                    cur = target;
                }
            }
            if(attr == "opacity"){//如果屬性是透明度
                dom.style[attr] = cur / 100;
            }else{
                dom.style[attr] = cur + 'px';
            }
        }
        if(mark){//知道所有的cur == target 時 mark 才為 true
            clearInterval(dom.timer);//完成了當前階段,清除定時器
            if(callback){//有回調(diào)函數(shù)泣刹,就執(zhí)行回調(diào)函數(shù)
                callback.call(dom);
            }
        }
    },30)
}

13助析、混入

function mix(target){
    var args = [].slice.call(arguments);

    for(var i = 1, len = args.length; i < len; i++){
        while(args[i]){
            for(var key in args[i]){
                if(args[i].hasOwnProperty(key)){
                    target[key] = args[i][key];
                }
            }
            i++;
        }
    }

    return target;
}

14、獲取鼠標位置

function getMounsePosition(e){
    var event = getEvent(e);
    var x = 0, y = 0;

    if(event.pageX && event.pageY){
        x = event.pageX;
        y = event.pageY;
    }else{
        x = event.cientX + document.documentElement.scrollLeft || document.body.scrollLeft;
        y = event.cientY + document.documentElement.scrollTop || document.body.scrollTop;
    }

    return {x:x,y:y};
}

15椅您、獲取滾動條寬度

function getScrollbarWidth() {
  var oP = document.createElement('p'),
      styles = {
          width: '100px',
          height: '100px',
          overflowY: 'scroll'
      }, i, scrollbarWidth;
  for (i in styles){
    oP.style[i] = styles[i];
  }
  document.body.appendChild(oP);
  scrollbarWidth = oP.offsetWidth - oP.clientWidth;
  oP.parentElement.removeChild(oP);

    return scrollbarWidth;
}

16外冀、js使一個元素居中

function centerElement(id){
    var boxDom = document.getElementById(id);
    var sw = boxDom.offsetWidth;
    var sh = boxDom.offsetHeight;
    var dw = window.innerWidth;
    var dh = window.innerHeight

    var cleft = (dw - sw) / 2;
    var ctop = (dh - sh) / 2;

    boxDom.style.left = cleft + "px";
    boxDom.style.top = ctop + "px";
}

17、操作兄弟元素(jq是siblings())

function siblings(obj,callback){
    var children = obj.parentElement.children;
    var arr = [].slice.call(children);
    arr.forEach(function(item,index,arr){
        if(item != obj && callback){
            callback.call(item)
        }
    })
}

18掀泳、范圍隨機數(shù)

function randomRange(begin,end){
    return Math.floor(Math.random()*(end-begin))+begin;
};

19雪隧、禁用右鍵/修改右鍵菜單

document.oncontextmenu = function(e) {  
    awesomeMenu(e);
}

function awesomeMenu(e) {
    var x = e.clientX;
    var y = e.clientY;

    // 獲取到鼠標位置后就可以自定義菜單了
}

</article>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市员舵,隨后出現(xiàn)的幾起案子脑沿,更是在濱河造成了極大的恐慌,老刑警劉巖马僻,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庄拇,死亡現(xiàn)場離奇詭異,居然都是意外死亡韭邓,警方通過查閱死者的電腦和手機措近,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仍秤,“玉大人熄诡,你說我怎么就攤上這事∈Γ” “怎么了凰浮?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苇本。 經(jīng)常有香客問我袜茧,道長,這世上最難降的妖魔是什么瓣窄? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任笛厦,我火速辦了婚禮,結(jié)果婚禮上裳凸,老公的妹妹穿的比我還像新娘。我一直安慰自己姨谷,他們只是感情好梦湘,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布捌议。 她就那樣靜靜地躺著瓣颅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僻孝。 梳的紋絲不亂的頭發(fā)上守谓,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天斋荞,我揣著相機與錄音平酿,去河邊找鬼。 笑死筑辨,一個胖子當著我的面吹牛棍辕,可吹牛的內(nèi)容都是我干的还绘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尿贫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起匆背,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搂根,沒想到半個月后剩愧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體仁卷,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡锦积,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年丰介,在試婚紗的時候發(fā)現(xiàn)自己被綠了哮幢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片志珍。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡伦糯,死狀恐怖舔株,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情惭等,我是刑警寧澤辞做,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布秤茅,位于F島的核電站,受9級特大地震影響课幕,放射性物質(zhì)發(fā)生泄漏乍惊。R本人自食惡果不足惜放仗,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一莉撇、第九天 我趴在偏房一處隱蔽的房頂上張望惶傻。 院中可真熱鬧达罗,春花似錦、人聲如沸巡李。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽季研。三九已至誉察,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間氨肌,已是汗流浹背酌畜。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工恳守, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留井誉,地道東北人整胃。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓屁使,卻偏偏與公主長得像蛮寂,于是被迫代替她去往敵國和親酬蹋。 傳聞我的和親對象是個殘疾皇子抽莱,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

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