这是一些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. Mysql查询结果只有一条的情况下把值赋值给变量,再用if else 流程判断

    BEGIN set @n=(SELECT count(day) from log where day=CURDATE()); THEN call m_LogInsert(); ELSE call m_ ...

  2. C#的三大难点之二:托管与非托管

    相关文章: C#的三大难点之前传:什么时候应该使用C#?​C#的三大难点之一:byte与char,string与StringBuilderC#的三大难点之二:托管与非托管C#的三大难点之三:消息与事件 ...

  3. CNN 防止过拟合的方法

    CNN 防止过拟合的方法 因为数据量的限制以及训练参数的增多,几乎所有大型卷积神经网络都面临着过拟合的问题,目前常用的防止过拟合的方法有下面几种:      1. data augmentation: ...

  4. C语言小板凳(1)

    ①strlen()函数作用:计算字符串的长度,当遇到"\n"字符时结束,即遇到数值"0"时结束计算,有一点特别要注意当这个函数用来计算数组的长度的时候遇到数值0 ...

  5. bootstrap-ui-datetime-picker插件学习

    GitHub:https://github.com/Gillardo/bootstrap-ui-datetime-picker 准备 安装:bower install --save bootstrap ...

  6. eclipse 开发 scala

    (环境:jdk1.7,scala插件scala-2.1.1.2-site.zip) 1:下载scala插件 http://download.scala-ide.org/sdk/helium/e38/s ...

  7. 关于myeclipse中启动项目(server为welogic10)报valid license.bea错误的问题解决方式

    之前由于重转系统.导致我的weblogic和myeclipse都要重装.重装之后,出现了问题,我是依照weblogic破解版的步骤来的.但还是报例如以下错误: Unable to start WebL ...

  8. erlang 最大公约数

    一般面试会遇到问一些算法,什么排序,树,图等等,冷不丁还会问几个蛋疼的问题,我估计生产情况十有八九都用不上,只是题目罢了. 题目:求两个大数的最大公约数. 什么是最大公约数呢? 百度百科的答案这样的: ...

  9. SharePoint 2013的100个新特性 免费电子书下载

    简介:这本电子书对SharePoint 2013的100个新特性和改进的功能提供了一个简短的说明,这些功能分为以下几类: 1. SharePoint 2013内容管理 2. SharePoint 20 ...

  10. selenium 遇到chrome 弹出是否保存密码框

    --待验证(以下是java脚本) ChromeOptions options = new ChromeOptions(); options.addArguments("--start-max ...