//获取元素的样式值。
function getStyle(elem, name) {
if (elem.style[name]) {
return elem.style[name];
} else if (elem.currentStyle) {
return elem.currentStyle[name];
} else if (document.defaultView && document.defaultView.getComputedStyle) {
name = name.replace(/([A-Z])/g, "-$1");
name = name.toLowerCase();
var s = document.defaultView.getComputedStyle(elem, "");
return s && s.getPropertyValue(name);
} else {
return null
}
}
//获取元素相对于这个页面的x和y坐标。
function pageX(elem) {
return elem.offsetParent ? (elem.offsetLeft + pageX(elem.offsetParent)) : elem.offsetLeft;
} function pageY(elem) {
return elem.offsetParent ? (elem.offsetTop + pageY(elem.offsetParent)) : elem.offsetTop;
}
//获取元素相对于父元素的x和y坐标。
function parentX(elem) {
return elem.parentNode == elem.offsetParent ? elem.offsetLeft : pageX(elem) - pageX(elem.parentNode);
} function parentY(elem) {
return elem.parentNode == elem.offsetParent ? elem.offsetTop : pageY(elem) - pageY(elem.parentNode);
}
//获取使用css定位的元素的x和y坐标。
function posX(elem) {
return parseInt(getStyle(elem, "left"));
} function posY(elem) {
return parseInt(getStyle(elem, "top"));
}
//设置元素位置。
function setX(elem, pos) {
elem.style.left = pos + "px";
} function setY(elem, pos) {
elem.style.top = pos + "px";
}
//增加元素X和y坐标。
function addX(elem, pos) {
set(elem, (posX(elem) + pos));
} function addY(elem, pos) {
set(elem, (posY(elem) + pos));
}
//获取元素使用css控制大小的高度和宽度
function getHeight(elem) {
return parseInt(getStyle(elem, "height"));
} function getWidth(elem) {
return parseInt(getStyle(elem, "width"));
}
//获取元素可能,完整的高度和宽度
function getFullHeight(elem) {
if (getStyle(elem, "display") != "none") {
return getHeight(elem) || elem.offsetHeight;
} else {
var old = resetCss(elem, {
display: "block",
visibility: "hidden",
position: "absolute"
});
var h = elem.clientHeight || getHeight(elem);
restoreCss(elem, old);
return h;
}
} function getFullWidth(elem) {
if (getStyle(elem, "display") != "none") {
return getWidth(elem) || elem.offsetWidth;
} else {
var old = resetCss(elem, {
display: "block",
visibility: "hidden",
position: "absolute"
});
var w = elem.clientWidth || getWidth(elem);
restoreCss(elem, old);
return w;
}
}
//设置css,并保存旧的css
function resetCss(elem, prop) {
var old = {};
for (var i in prop) {
old[i] = elem.style[i];
elem.style[i] = prop[i];
}
return old;
} function restoreCss(elem, prop) {
for (var i in prop) {
elem.style[i] = prop[i];
}
}
//显示和隐藏
function show(elem) {
elem.style.display = elem.$oldDisplay || " ";
} function hide(elem) {
var curDisplay = getStyle(elem, "display");
if (curDisplay != "none") {
elem.$oldDisplay = curDisplay;
elem.style.display = "none";
}
}
//设置透明度
function setOpacity(elem, num) {
if (elem.filters) {
elem.style.filter = "alpha(opacity=" + num + ")";
} else {
elem.style.opacity = num / 100;
}
}
//滑动
function slideDown(elem) {
var h = getFullHeight(elem);
elem.style.height = "0px";
show(elem);
for (var i = 0; i <= 100; i += 5) {
new function() {
var pos = i;
setTimeout(function() {
elem.style.height = (pos / 100 * h) + "px";
}, (pos * 10));
}
}
}
//渐变
function fadeIn(elem) {
show(elem);
setOpacity(elem, 0);
for (var i = 0; i <= 100; i += 5) {
new function() {
var pos = i;
setTimeout(function() {
setOpacity(elem, pos);
}, (pos + 1) * 10);
}
}
}
//获取鼠标光标相对于整个页面的位置。
function getX(e) {
e = e || window.event;
return e.pageX || e.clientX + document.body.scrollLeft;
} function getY(e) {
e = e || window.event;
return e.pageY || e.clientY + document.body.scrollTop;
}
//获取鼠标光标相对于当前元素的位置。
function getElementX(e) {
return (e && e.layerX) || window.event.offsetX;
} function getElementY(e) {
return (e && e.layerY) || window.event.offsetY;
}
//获取页面的高度和宽度
function getPageHeight() {
var de = document.documentElement;
return document.body.scrollHeight || (de && de.scrollHeight);
} function getPageWidth() {
var de = document.documentElement;
return document.body.scrollWidth || (de && de.scrollWidth);
}
//获取滚动条的位置。
function scrollX() {
var de = document.documentElement;
return self.pageXOffset || (de && de.scrollLeft) || document.body.scrollLeft;
} function scrollY() {
var de = document.documentElement;
return self.pageYOffset || (de && de.scrollTop) || document.body.scrollTop;
}
//获取视口的高度和宽度。
function windowHeight() {
var de = document.documentElement;
return self.innerHeight || (de && de.offsetHeight) || document.body.offsetHeight;
} function windowWidth() {
var de = document.documentElement;
return self.innerWidth || (de && de.offsetWidth) || document.body.offsetWidth;
}

《Pro JavaScript Techniques》中的一些函数的更多相关文章

  1. 借助JavaScript中的时间函数改变Html中Table边框的颜色

    借助JavaScript中的时间函数改变Html中Table边框的颜色 <html> <head> <meta http-equiv="Content-Type ...

  2. javascript中通过匿名函数进行事件绑定

  3. 前端学习 第二弹: JavaScript中的一些函数与对象(1)

    前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...

  4. JavaScript中的普通函数与构造函数比较

    问题 什么是构造函数?构造函数与普通函数区别是什么?用new关键字的时候到底做了什么?构造函数有返回值怎么办?构造函数能当普通函数调用吗? thisthis永远指向当前正在被执行的函数或方法的owne ...

  5. 理解和使用 JavaScript 中的回调函数

    理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报  分类: JavaScript(4)    目录( ...

  6. JavaScript中变量和函数声明的提升

    现象: 1.在JavaScript中变量和函数的声明会提升到最顶部执行. 2.函数的提升高于变量的提升. 3.函数内部如果用var声明了相同名称的外部变量,函数将不再向上寻找. 4.匿名函数不会提升. ...

  7. [转]理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回. 因 ...

  8. 【JavaScript】理解与使用Javascript中的回调函数

    在Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用.既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回. 因 ...

  9. JavaScript ES7 中使用 async/await 解决回调函数嵌套问题

    原文链接:http://aisk.me/using-async-await-to-avoid-callback-hell/ JavaScript 中最蛋疼的事情莫过于回调函数嵌套问题.以往在浏览器中, ...

随机推荐

  1. bzoj 1875 矩阵快速幂

    思路:不能走走过来的路,变点交换跑矩阵快速幂. #include<bits/stdc++.h> #define LL long long #define fi first #define ...

  2. 今日头条、Face++开发岗面经

    今日头条.Face++开发岗面经 [头条] 两个栈实现一个队列.怎么优化 数组每一个元素找出数组右边第一个大于自己的数 实现LRU TCP四次握手 滑动窗口.窗口大小 线程与进程区别 什么是线程安全 ...

  3. EditText属性描述

    android:layout_gravity="center_vertical"//设置控件显示的位置:默认top,这里居中显示,还有bottom android:hint=&qu ...

  4. DDL DML DCL DQL的区别

    原文章出处:http://blog.csdn.net/tomatofly/article/details/5949070 SQL(Structure Query Language)语言是数据库的核心语 ...

  5. Python并发编程-进程的几个方法

    join()方法 from multiprocessing import Process import time def func(arg1,arg2): print('*'*arg1) time.s ...

  6. BZOJ4551 HEOI2016树

    可以用并查集,记忆化搜索,线段树多种方法实现. 我这里写的是依照dfs序建线段树,维护区间最大值. #include<bits/stdc++.h> using namespace std; ...

  7. hdu 3089 (快速约瑟夫环)

    Josephus again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. [CC-STREETTA]The Street

    [CC-STREETTA]The Street 题目大意: 给定两个长度为\(n(n\le10^9)\)的数列\(A\)和\(B\),开始数列\(A\)中每一项值为\(-\infty\),数列\(B\ ...

  9. Android消息机制——Handler

      /**android的消息处理有三个核心类:Looper,Handler和Message.其实还有一个MessageQueue(消息队列), * 但是MessageQueue被封装到Looper里 ...

  10. MAMP PRO 下安装 memcache

    本人PHP用的是 5.5.10,编译 memcache 模块需要用到 php 源码,mamp 不自带,到 php 官网下一个 php-5.5.11.tar.gz, 解压后,生成 zend_config ...