这是一些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原生函数一些封装的更多相关文章

  1. 兼容主流浏览器的js原生函数封装

    1.获取和修改垂直滚动条的滚动距离 //获取滚动条滚动距离function getScrollTop(){ var fromTop=document.documentElement.scrollTop ...

  2. js原生Ajax 的封装和原理

    原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...

  3. js原生Ajax的封装与使用

    一.原生Ajax代码的封装如下: (function() { var XHR = { createStandardXHR: function() { return new XMLHttpRequest ...

  4. js原生函数bind

    /*在javascript中,函数总是在一个特殊的上下文执行(称为执行上下文),如果你将一个对象的函数赋值给另外一个变量的话,这个函数的执行上下文就变为这个变量的上下文了.下面的一个例子能很好的说明这 ...

  5. js原生函数

    arguments:代表所有的形参的集合: 可以通过arguments: cosole.log(arguments):打印所有参数 console.log(arguments[i]);可以通过访问下标 ...

  6. js常用函数的封装

    1://截取url带过来的参数 function getvl(name) { var reg = new RegExp("(^|\\?|&)" + name + " ...

  7. JS原生Date类型方法的一些冷知识

    ps:由于Date()是js原生函数,不同浏览器的解析器对其实现方式并不同,所以返回值也会有所区别.本文测试未特别申明浏览器的情况下,均是指win7 x64+chrome 44.0.2403.155 ...

  8. 使用Node.js原生API写一个web服务器

    Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...

  9. 《You dont know JS》原生函数

    原生函数 原生函数,即JavaScript的内建函数(built-in function).常用的原生函数有String().Number().Boolean().Array().Object().F ...

随机推荐

  1. Android蓝牙

    代码地址如下:http://www.demodashi.com/demo/12772.html 前言:最近,新换了一家公司,公司的软件需要通过蓝牙与硬件进行通讯,于是趁此机会将Android蓝牙详细的 ...

  2. 正则表达式匹配 href 和text内容

    string pattern = @"<a[^>]*href=(""(?<href>[^""]*)""|' ...

  3. c#利用委托传递函数参数(1)

    本次旨在解决 同参不同名 的函数作为参数传递的情况 情景: 一下两个函数分别多次重复调用了两个同参不同名的函数(实际上总共有3个这样的函数),函数结构基本相同,只有调用的函数名不一样,显然可以整合在一 ...

  4. CDN对于动态加速是否有效

    CDN对于动态加速是否有效的问题.关于这个问题,一直存在一些分歧,部分人认为有效,部分人认为无效,主要是CDN技术也在更新,而且是比较低调的进行着更新,所以并不是所有人都清楚CDN对动态加速的效果.其 ...

  5. 自动化测试 python2.7 与 selenium 2 学习

    windows环境搭建 # 下载 python[python 开发环境] http://python.org/getit/ # 下载 setuptools [python 的基础包工具]setupto ...

  6. 在SDL中显示GBK点阵汉字

    大家注意到没有,RA2的中文版本使用的是GBK点阵字库,这样做有一个好处:不管玩家是用的简体还是繁体都能识别显示的文字. GBK的意思大概是“国家标准汉字扩展字符集”吧,记不清了.但它的确是个好东东, ...

  7. ThinkPHP3.1URL分发BUG修正

    请先留意以下PHP脚本 PHP脚本A(http://127.0.0.1:8110/test.php): $url = 'http://127.0.0.1:8110/demo.php'; //curl请 ...

  8. iOS系列译文:自定义Collection View布局

    原文出处: Ole Begemann   译文出处: 黄爱武(@answer-huang).欢迎加入技术翻译小组. UICollectionView在iOS6中第一次被介绍,也是UIKit视图类中的一 ...

  9. 在Ubuntu下利用Eclipse调试FFmpeg

    [编辑]第一步:准备编译环境 .tar.bz2 -2245/ ./configure -linux-i586.tar.gz 解压后得到jre1.7.0_17目录 最后通过java -version检查 ...

  10. JQ中find()与filter()的区别

    刚开始学的时候,对于find()和filter()有点理不清楚,下面通过案例相信就可以很快的区分清楚 以下是代码 find弹出的是 filter()弹出的是 下面我们添加div的class是rain ...