js原生函数一些封装
这是一些js原生封装的函数,主要是为了兼容IE浏览器,如下
获取css样式
function getStyle(ele, prop) {
if(window.getComputedStyle) {
return window.getComputedStyle(ele, null)[prop];
}else {
return ele.currentStyle[prop];
}
}
fixed封装
function fixed(ele) {
var w = parseInt(getStyle(ele, 'left')),
h = parseInt(getStyle(ele, 'top'));
addEvent(ele, 'scroll', function () {
ele.style.left = w + getScrollOffset().w + 'px';
ele.style.top = h + getScrollOffset().h + 'px';
})
}
获取浏览器可视区域宽度
function getViewPortOffset() {
if(window.innerWidth) {
return {
w: window.innerWidth,
h: window.innerHeight
}
}else if(document.compatMode = "BackCompat") {
return {
w: document.body.clientWidth,
h: document.body.clientHeigth
}
}else {
return {
w: document.documentElement.clientWidth,
h: document.documentElement.clientHeight
}
}
}
获取浏览器滚动距离
function getScrollOffset() {
if(window.pageXOffset) {
return {
w: window.pageXOffset,
h: window.pageYOffset
}
}else {
return {
w: document.body.scrollLeft + document.documentElement.scrollLeft,
h: document.body.scrollTop + document.documentElement.scrollTop
}
}
}
获取元素尺寸宽高
Element.prototype.getElementOffset = function () {
var objData = this.getBoundingClientRect();
if(objData.width) {
return {
w: objData.width,
h: objData.height
}
}else {
return {
w: objData.right - objData.left,
h: objData.top - objData.bottom
}
}
}
获取元素相对于浏览器的left和top值
Element.prototype.getElementPosition = function () {
var x = 0,
y = 0,
ele = this;
while(ele != document.body) {
x += ele.scrollLeft;
y += ele.scrollTop;
ele = ele.offsetParent;
}
return {
x: x,
y: y
}
}
绑定事件
function addEvent(ele, type, handle) {
if(ele.addEventListener) {
ele.addEventListener(type, handle, false);
}else if(ele.attachEvent) {
ele['temp' + type + handle] = handle;
ele[type + handle] = function () {
ele['temp' + type + handle].call(ele);
}
ele.attachEvent('on' + type, ele[type + hadnle]);
}else {
ele['on' + type] = handle;
}
}
取消事件绑定
function removeEvent(ele, type, handle) {
if(ele.removeEventListener) {
ele.removeEventListener(type, handle, false);
}else if(ele.detachEvent) {
ele.detachEvent('on' + type, handle);
}else {
ele['on' + type] = null;
}
}
阻止事件冒泡
function stopBubble(event) {
if(event.stopPropagation) {
event.stopPropagation();
}else {
event.cancelBubble = true;
}
}
取消默认事件
function cancelHandle (event) {
if(event.preventDefault) {
event.preventDeault();
}else {
event.returnValue = false;
}
}
拖拽实现
function drag(ele) {
var disX, disY;
addEvent(ele, 'mousedown', function (e) {
var event = e || window.event;
disX = event.clientX - getStyle(ele, 'left');
disY = event.clientY - getStyle(ele, 'top');
addEvent(ele, 'mousemove', mouseMove);
addEvent(ele, 'mouseup', mouseUp);
stopBubble(event);
cancelHandle(event);
});
function mouseMove(event) {
ele.style.left = event.clientX - disX;
ele.style.top = event.clientY - disY;
}
function mouseUp(event) {
removeEvent(ele, 'mousemove', mouseMove);
removeEvent(ele, 'mouseup', mouseUp);
}
}
js异步加载
function asyncLoaded(url, cb) {
var oScript = document.createElement('script');
if(oScript.readyState) {
oScript.onreadystatechange = function () {
if(oScript.readyState == 'loaded' || oScrip.readyState == 'completed') {
cb();
}
}
}else {
oScript.onload = function () {
cb();
}
}
oScript.src = url;
document.body.appnedChild(oScript);
}
js原生函数一些封装的更多相关文章
- 兼容主流浏览器的js原生函数封装
1.获取和修改垂直滚动条的滚动距离 //获取滚动条滚动距离function getScrollTop(){ var fromTop=document.documentElement.scrollTop ...
- js原生Ajax 的封装和原理
原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...
- js原生Ajax的封装与使用
一.原生Ajax代码的封装如下: (function() { var XHR = { createStandardXHR: function() { return new XMLHttpRequest ...
- js原生函数bind
/*在javascript中,函数总是在一个特殊的上下文执行(称为执行上下文),如果你将一个对象的函数赋值给另外一个变量的话,这个函数的执行上下文就变为这个变量的上下文了.下面的一个例子能很好的说明这 ...
- js原生函数
arguments:代表所有的形参的集合: 可以通过arguments: cosole.log(arguments):打印所有参数 console.log(arguments[i]);可以通过访问下标 ...
- js常用函数的封装
1://截取url带过来的参数 function getvl(name) { var reg = new RegExp("(^|\\?|&)" + name + " ...
- JS原生Date类型方法的一些冷知识
ps:由于Date()是js原生函数,不同浏览器的解析器对其实现方式并不同,所以返回值也会有所区别.本文测试未特别申明浏览器的情况下,均是指win7 x64+chrome 44.0.2403.155 ...
- 使用Node.js原生API写一个web服务器
Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...
- 《You dont know JS》原生函数
原生函数 原生函数,即JavaScript的内建函数(built-in function).常用的原生函数有String().Number().Boolean().Array().Object().F ...
随机推荐
- windows远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可
远程桌面如果超出最大连接数, 使用命令行mstsc /console登录即可. (也可以用 mstsc /admin) 可以在运行里使用mstsc /console /v:IP:远程端口即可强制登录; ...
- 对象序列和反序列化Xml
1. XmlArray和XmlArrayItem XmlArray和XmlArrayItem是不同的,XmlArray是指这个数组叫什么,XmlArrayItem 值数组的每个元素叫什么. <X ...
- Rabbitmq消息队列(一) centos下安装rabbitmq
1.简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的解耦,消息的 ...
- vim 基本常用设置
1. :set number 设置行号 2. :set relativenumber 设置相对行号 3. :set hlsearch 设置搜索高亮 4. :set noh 关闭搜索高亮 ...
- idea实时编译代码
实时编译就不解释了,出现错误的代码在命令行能给你提示出来.看图操作吧:
- ps选框工具全解
我们每次选择工具的时候,ps上面都会变成特定的选项,比如说下面这些: 比如说选区工具的话就分为新选区.添加选区.交叉选区之类的,这些都是需要在实战中练习的. 不单单是选区有这个工具,其他的也有这个功能 ...
- 看完这篇还不会 GestureDetector 手势检测,我跪搓衣板!
引言 在 android 开发过程中,我们经常需要对一些手势,如:单击.双击.长按.滑动.缩放等,进行监测.这时也就引出了手势监测的概念,所谓的手势监测,说白了就是对于 GestureDetector ...
- Zabbix二次开发_03api列表
基于zabbix 3.0 https://www.zabbix.com/documentation/3.0/manual/api/reference Method reference This sec ...
- 从sql走向linq的我撞死在起点上
[本文纯个人理解,错误轻喷,非常希望能有大神指点] A left (outer) join B on A.bid=B.id 上面这句话叫做左连接,原因是left(左)join(加入,连入)被译为左连接 ...
- 【入门】创建express项目
1.创建项目(图解) 2.访问http://localhost:3000/就看到熟悉的页面了 3.查看项目目录 参考文档:http://jingyan.baidu.com/article/92 ...