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 ...
随机推荐
- Mysql查询结果只有一条的情况下把值赋值给变量,再用if else 流程判断
BEGIN set @n=(SELECT count(day) from log where day=CURDATE()); THEN call m_LogInsert(); ELSE call m_ ...
- C#的三大难点之二:托管与非托管
相关文章: C#的三大难点之前传:什么时候应该使用C#?C#的三大难点之一:byte与char,string与StringBuilderC#的三大难点之二:托管与非托管C#的三大难点之三:消息与事件 ...
- CNN 防止过拟合的方法
CNN 防止过拟合的方法 因为数据量的限制以及训练参数的增多,几乎所有大型卷积神经网络都面临着过拟合的问题,目前常用的防止过拟合的方法有下面几种: 1. data augmentation: ...
- C语言小板凳(1)
①strlen()函数作用:计算字符串的长度,当遇到"\n"字符时结束,即遇到数值"0"时结束计算,有一点特别要注意当这个函数用来计算数组的长度的时候遇到数值0 ...
- bootstrap-ui-datetime-picker插件学习
GitHub:https://github.com/Gillardo/bootstrap-ui-datetime-picker 准备 安装:bower install --save bootstrap ...
- eclipse 开发 scala
(环境:jdk1.7,scala插件scala-2.1.1.2-site.zip) 1:下载scala插件 http://download.scala-ide.org/sdk/helium/e38/s ...
- 关于myeclipse中启动项目(server为welogic10)报valid license.bea错误的问题解决方式
之前由于重转系统.导致我的weblogic和myeclipse都要重装.重装之后,出现了问题,我是依照weblogic破解版的步骤来的.但还是报例如以下错误: Unable to start WebL ...
- erlang 最大公约数
一般面试会遇到问一些算法,什么排序,树,图等等,冷不丁还会问几个蛋疼的问题,我估计生产情况十有八九都用不上,只是题目罢了. 题目:求两个大数的最大公约数. 什么是最大公约数呢? 百度百科的答案这样的: ...
- SharePoint 2013的100个新特性 免费电子书下载
简介:这本电子书对SharePoint 2013的100个新特性和改进的功能提供了一个简短的说明,这些功能分为以下几类: 1. SharePoint 2013内容管理 2. SharePoint 20 ...
- selenium 遇到chrome 弹出是否保存密码框
--待验证(以下是java脚本) ChromeOptions options = new ChromeOptions(); options.addArguments("--start-max ...