这是一些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. sql server 类oracle vm_contact() 函数创建

    CREATE FUNCTION dbo.fun_orgname(@id int)RETURNS varchar(8000)AS BEGIN      DECLARE @str varchar(8000 ...

  2. &&与&符号区别

    http://topic.csdn.net/u/20080915/16/f5125300-f69f-4da8-9c3a-a7458590553f.html && 与 &区别: ...

  3. C#开发--FTP操作方法管理

    1.整理简化了下C#的ftp操作,方便使用    1.支持创建多级目录    2.批量删除    3.整个目录上传    4.整个目录删除    5.整个目录下载 2.调用方法展示, var ftp ...

  4. android CheckBox控件的定义及事件监听

    http://www.beijibear.com/index.php?aid=336 android CheckBox控件的定义及事件监听,本例实现CheckBox控件的定义及点击事件的监听并显示结果 ...

  5. CentOS修改IP地址及关闭/打开防火墙

    1.CentOS修改IP地址: # ifconfig eth0 192.168.1.80 这样就把IP地址修改为192.168.1.80(如果发现上不了网 了,那么你可能需要把网关和DNS也改一下,后 ...

  6. HttpClient远程调用接口

    详细参考这个博文:http://www.cnblogs.com/itliucheng/p/5065619.html 一.get请求: //关键代码就这几行 String urlNameString = ...

  7. 在eclipse创建和myeclipse一样结构的web项目

    之前一直使用myeclipse,现在换成eclipse,但是创建的新项目让我很不习惯,下面这个方法可以解决. 创建好的项目结构如下图所示,不过看着还是很别扭,我们window→show view→ot ...

  8. 把flask部署到服务器

    1.新建一个wsgi.py文件 # -*- coding:utf-8 -*- import sys from os.path import abspath from os.path import di ...

  9. 01 linux上安装 nginx

    一:linux上安装 nginx 下载nginx:wget http://nginx.org/download/nginx-1.6.2.tar.gz 解压:tar zxvf nginx-1.6.2.t ...

  10. resin 4.0 项目的配置

    前一篇我们了解了resin中配置数据源,依照不同项目的要求我们进行数据源的配置,如多个项目共享多个数据源,一个项目配置多个数据源,以下我们来看看项目的部署方式: 1.在一个host(虚拟主机)下配置一 ...