【转自CSDN】JS常见代码块,持续更新......

JS常见代码块,持续更新......

https://blog.csdn.net/real_bird/article/details/55510296
2017年02月17日 19:18:13 睡在我下铺的上铺的胖子 阅读数 1095

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Real_Bird/article/details/55510296

个人使用过程中收集的…弄丢了几次,现在放到博客,更新中……

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级事件处理程序 动态绑定 btn.onclinck = function(){this === btn};

/*使用attachEvent方法时,
    1...事件处理程序在全局作用域运行,this等于window;
    2...添加多个时,按相反顺序执行
    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、设置光标的位置

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;//选中的结束位置
        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秒执行一遍所有的attr属性,和if(mark)
        var mark = true;//设置mark--是因为有多个属性。多个属性同时满足条件,才执行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;//如果没设置属性默认让它为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网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){//有回调函数,就执行回调函数
                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、范围随机数

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>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容