JS常见代码块,持续更新......
来源:互联网 发布:轮询算法 java 编辑:程序博客网 时间:2024/06/18 09:22
个人使用过程中收集的…弄丢了几次,现在放到博客,更新中……
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; // 获取到鼠标位置后就可以自定义菜单了}
0 0
- JS常见代码块,持续更新......
- Android常用工具代码块(持续更新)
- JS 自定义代码库(持续更新)
- 前端常见BUG--js,及处理方法(持续更新)
- js常见编程题整理(持续更新中)
- 常见算法的java实现代码(持续更新中)
- 写js代码小技巧(新手)--持续更新
- js总结-持续更新。。。。。
- nginx常见错误---持续更新
- xcode常见错误信息---持续更新
- Oracle常见查询(持续更新)
- 常见 bug 汇总 (持续更新)
- js小技巧(持续更新)
- js积累(持续更新)
- JS兼容问题总结 -持续更新
- JS知识整理(持续更新)
- 各种JS小结-持续更新
- JS常用代码块
- 百度文库转载高通手机开发概述
- CentOS 6.5搭建Nexus Maven私服
- JDBC操作数据库基本步骤
- 使用vue.js实现checkbox的全选,和多个的删除
- java字符串转换List map
- JS常见代码块,持续更新......
- 8.内部类
- stdin,stderr,stdout
- home-brew
- python安装
- Gulp在前端的常用操作实例
- 包装类的自动装拆箱及Integer类的缓存区问题
- linuxC通讯录
- 设计模式 杂谈