《精通javascript》几个简单的函数
转载http://www.cnblogs.com/jikey/archive/2011/07/25/2116696.html
/**
* 隐藏元素
* @param {String} elem
*/
function hide(elem){
var curDisplay = getStyle(elem, 'display');
if(curDisplay != 'none'){
elem.oldDisplay = curDisplay;
}
elem.style.display = 'none';
}
/**
* 显示元素
* @param {String} elem
*/
function show(elem){
elem.style.display = elem.oldDisply || 'block';
}
/**
* 设置透明度
* @param {Object} elem
* @param {Object} level (0-100)
*/
function setOpacity(elem, level){
if(elem.filters){ //如果是IE
elem.style.filter = 'alpha(opacity=' + level + ')';
//必须设置zoom,要不然透明度在IE下不生效 From:http://blog.csdn.net/dxx1988/article/details/6581430
elem.style.zoom = 1;
} else { //否则是W3C
elem.style.opacity = level / 100;
}
}
/**
* 滑动
* @param {Object} elem
*/
function slideDown(elem){
//elem.style.height = '0px';
show(elem);
var h = fullHeight(elem);
for(var i=0; i<=100; i+=5){
(function(){
var pos = i;
setTimeout(function(){
elem.style.height = (pos/100) * h + 'px';
}, (pos + 1) * 5);
})();
}
}
//slideDown($('pText'));
//alert(fullHeight($('pText')));
/**
* 透明度渐显 From: http://mrthink.net/js-fadein-fadeout-fadeto/
* @param {Object} elem
* @param {Number} speed 淡入速度,正整数(可选)
* @param {Number} opacity 淡入到指定的透明度,0~100(可选)
*/
function fadeInThink(elem, speed, opacity){
speed = speed || 20;
opacity = opacity || 100;
show(elem);
setOpacity(elem, 0);
//初始化透明度变化值为0
var val = 0;
//循环将透明值以5递增,即淡入效果
(function(){
setOpacity(elem, val);
val += 5;
if (val <= opacity) {
setTimeout(arguments.callee, speed)
}
})();
}
/**
* 透明度渐显
* @param {Object} elem
*/
function fadeIn(elem){
//setOpacity(emel, 0);
show(elem);
for(var i=0; i<=100; i+=10){
(function(){
var pos = i;
setTimeout(function(){
setOpacity(elem, pos);
}, (pos + 1) * 10);
})();
}
}
/**
* 透明度渐隐 From: http://mrthink.net/js-fadein-fadeout-fadeto/
* @param {Object} elem
*/
function fadeOut(elem){
var val = 100;
(function(){
setOpacity(elem, val);
val -= 5;
if(val >= 0){
setTimeout(arguments.callee, 50);
} else if(val < 0){
hide(elem);
}
})();
}
//fadeInThink($('pText'));
/**
* 光标的水平位置
* @param {Object} e
*/
function getX(e){
e = e || window.event;
return e.pageX || e.clientX + document.body.scrollLeft;
}
/**
* 光标的垂直位置
* @param {Object} e
*/
function getY(e){
e = e || window.event;
return e.pageY || e.clientY + document.body.scrollTop;
}
/**
* 获得鼠标相对于当前元素的X位置
* @param {Object} e
*/
function getElementX(e){
return (e && e.layerX) || window.event.offsetX;
}
/**
* 获得鼠标相对于当前元素的Y位置
* @param {Object} e
*/
function getElementY(e){
return (e && e.layerY) || window.event.offsetY;
}
/**
* 当前页面的高度
*/
function pageHeight(){
return document.body.scrollHeight;
}
/**
* 当前页面的宽度
*/
function pageWidth(){
return document.body.scrollWidth;
}
//alert(pageHeight());
/**
* 视口的高度
*/
function windowHeight(){
var de = document.documentElement;
return self.innerHeight || (de && de.clientHeight) || document.body.clientHeight;
}
/**
* 视口的高度
*/
function windowWidth(){
var de = document.documentElement;
return self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
}
/**
* 浏览器水平滚动位置
*/
function scrollX(){
var de = document.documentElement;
return self.pageOffsetset || (de && de.scrollLeft) || document.body.scrollLeft;
}
/**
* 浏览器垂直滚动位置
*/
function scrollY(){
var de = document.documentElement;
return self.pageYOffset || (de && de.scrollTop) || document.body.scrollTop;
}
function $(){ return document.getElementById(arguments[0])};
/**
* 得到上一个元素
* @param {Object} elem
*/
function prev(elem){
do{
elem = elem.previousSibling;
} while(elem && elem.nodeType != 1);
return elem;
}
/**
* 得到下一个元素
* @param {Object} elem
*/
function next(elem){
do{
elem = elem.nextSibling;
} while(elem && elem.nodeType != 1);
return elem;
}
/**
* 得到第一个元素
* @param {Object} elem
*/
function first(elem){
elem = elem.firstChild;
return elem && elem.nodeType != 1 ? next(elem) : elem;
}
/**
* 得到最后一个元素
* @param {Object} elem
*/
function last(elem){
elem = elem.lastChild;
return elem && elem.nodeType != 1 ? prev(elem) : elem;
}
/**
* 得到父元素
* @param {Object} elem
* @param {Number} num 需要寻找的父级级别
*/
function parent(elem, num){
num = num || 1;
for(var i=0; i<num; i++){
if(elem != null) elem = elem.parentNode; //原书中这块有错
}
return elem;
}
/**
* 得到相关name元素
* @param {String} name
* @param {Object} elem
*/
function tag(name, elem){
return (elem || document).getElementsByTagName(name)
}
/**
* 根据tag寻找
* @param {String} name
* @param {String} type
*/
function hasClass(name, type){
var r = [];
var re = new RegExp('(^|\\s)'+name+'(\\s|$)');
var e = document.getElementsByTagName(type || '*');
for(var i=0; i<e.length; i++){
if(re.test(e[i].className)){
r.push(e[i]);
}
}
return r;
//http://www.cnblogs.com/rubylouvre/archive/2009/09/01/1557765.html //司徒兄有不同的看法
}
/**
* 获取元素文本
* @param {Object} e
*/
function text(e){
var t = '';
e = e.childNodes || e;
for(var i=0; i<e.length; i++){
//如果不是元素,则追加其文本值
t += e[i].nodeType != 1 ? e[i].nodeValue : text(e[i].childNodes);
}
return t;
}
/**
*
* @param {String} elem
* @param {String} name
* @param {String} value
*/
function attr(elem, name, value){
if(!name || name.constructor != String){
return '';
}
//检查name的属性是否在怪异命名情形中
name = {'for': 'htmlFor', 'class': 'className'}[name] || name;
if(typeof value != 'undefined'){
elem[name] = value;
if(elem.setAttribute){
elem.setAttribute(name, value);
}
}
return elem[name] || elem.getAttribute(name) || '';
}
/**
* 在另一个元素之前插件元素
* @param {Object} parent
* @param {Object} before
* @param {String} elem
*/
function before(parent, before, elem){
if(elem == null){
elem = before;
before = parent;
parent = before.parentNode;
}
//获取元素的新数组
var elems = checkElem(elem);
//向后遍历
for(var i=elems.length; i>=0; i--){
parent.insertBefore(elems[i], before);
}
}
/**
* 创建元素
* @param {Object} elem
*/
function create(elem){
//测试是否用命名空间来创建新的元素
return document.createElementNS ? document.createElementNS('http://www.w3.org/1999/xhtml', elem) : document.createElement(elem);
}
/**
* before 辅助函数
* @param {Object} elem
*/
function checkElem(a){
var r = [];
if(a.constructor != Array){ a = [a]};
for(var i=0; i<a.length; i++){
//如果是字符串
if(a[i].constructor == String){
//用一个临时元素来存放HTML
var div = document.createElement('div');
div.innerHTML = a[i];
//提取DOM结构到临时的div中
for(var j=0; j<div.childNodes.length; j++){
r[r.length] = div.childNodes[j];
}
} else if(a[i].length){ //如果它是数组
//假定DOM节点数组
for(var j=0; j<a[i].length; j++){
r[r.length] = a[i][j];
}
} else { //否则假定是DOM节点
r[r.length] = a[i];
}
}
return r;
}
//此方法我已修改与原文中有异
/**
* 添加元素 (如果只有一个参数(无elem),则直接添加到document.body上)
* @param {Object} elem
* @param {Object} parent
*/
function append(parent, elem){
if(elem == null){
elem = parent;
parent = null;
}
//获取元素数组
var elems = checkElem(elem);
for(var i=0; i< elems.length; i++){
(parent || document.body).appendChild(elems[i]);
}
}
/**
* 删除独立的DOM
* @param {Object} elem
*/
function remove(elem){
if(elem){ elem.parentNode.removeChild(elem) };
}
/**
* 删除一个节点的所有子节点
* @param {Object} elem
*/
function empty(elem){
while(elem.firstChild){
remove(elem.firstChild);
}
}
/**
* 阻止事件冒泡
* @param {Object} e
*/
function stopBubble(e){
if(e && e.stopPropagation){
e.stopPropagation();
} else {
window.event.cancelBubble = true;
}
}
function stopDefault(e){
if(e && e.preventDefault){
e.preventDefault();
} else {
window.event.returnValue = false;
}
return false;
}
/**
* 得到外链样式
* @param {Object} elem
* @param {String} name
*/
function getStyle(elem, name){
if(elem.style[name]){
return elem.style[name];
} else if(elem.currentStyle){ //如果ie
return elem.currentStyle[name];
} else if(document.defaultView && document.defaultView.getComputedStyle){ //如果是不是w3c方法
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位置
* @param {String} elem
*/
function pageX(elem){
return elem.offsetParent ? elem.offsetLeft + pageX(elem.offsetParent) : elem.offsetLeft;
}
/**
* 获取元素的Y位置
* @param {String} elem
*/
function pageY(elem){
return elem.offsetParent ? elem.offsetTop + pageY(elem.offsetParent) : elem.offsetTop;
}
/**
* 获取元素相对于父级的x位置
* @param {String} elem
*/
function parentX(elem){
return elem.parentNode == elem.offsetParent ? elem.offsetLeft : pageX(elem) - pageX(elem.parentNode);
}
/**
* 获取元素相对于父级的Y位置
* @param {String} elem
*/
function parentY(elem){
return elem.parentNode == elem.offsetParent ? elem.offsetTop : pageY(elem) - pageY(elem.parentNode);
}
/**
* 查找元素的左端位置
* @param {Object} elem
*/
function posX(elem){
return parseInt(getStyle(elem, 'left'));
}
/**
* 查找元素的顶端位置
* @param {Object} elem
*/
function posY(elem){
return parseInt(getStyle(elem, 'top'));
}
/**
* 设置元素水平位置
* @param {Object} elem
* @param {Object} pos
*/
function setX(elem, pos){
elem.style.left = pos + 'px';
}
/**
* 设置垂直水平位置
* @param {Object} elem
* @param {Object} pos
*/
function setY(elem, pos){
elem.style.top = pos + 'px';
}
/**
* 获取高度
* @param {Object} elem
*/
function getHeight(elem){
return parseInt(getStyle(elem, 'height'));
}
/**
* 获取宽度
* @param {Object} elem
*/
function getWidth(elem){
return parseInt(getStyle(elem, 'width'));
}
/**
* 得到完整的高度,就算对象已隐藏
* @param {Object} elem
*/
function fullHeight(elem){
//如果元素显示
if(getStyle(elem, 'display') != 'none'){
return elem.offsetHeight || getHeight(elem);
}
//如果不显示,则复原css
var old = resetCss(ele, {
display: '',
visibility: 'hidden',
position: 'absolute'
});
var h = elem.clientHeight || getHeight(elem);
restoreCss(elem, old);
return h;
}
/**
* 恢复原有设置
* @param {String} elem
* @param {Object} prop
*/
function resetCss(elem, prop){
var old = {};
for(var i in prop){
old[i] = prop[i];
elem.style[i] = prop[i];
}
return old;
}
/**
*
* @param {String} elem
* @param {Object} old
*/
function restoreCss(elem, old){
for(var i in old){
elem.style[i] = old[i];
}
}
《精通javascript》几个简单的函数的更多相关文章
- <精通JavaScript>---阅读笔记01
下面是阅读精通JavaScript书做的相关笔记. JS中的函数重载 函数重载必须依赖两件事情:判断传入参数数量的能力和判断传入参数类型的能力,在js中每个函数都带有一个仅在这个函数范围内作用的变量, ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
- JavaScript学习笔记(一):介绍JavaScript的一些简单知识
JavaScript是世界上最流行的编程语言.这门语言可用于HTML和web,更可广泛用于服务器.PC.笔记本电脑和智能手机等设备.---------------------------------- ...
- 《JavaScript语言精粹》之函数化
写在前面 看到好多书评和读书笔记都说<JavaScript语言精粹>字字珠玑,名不虚传..当然,要看得懂才行 其实个人认为函数化部分不是很好,举的例子不是十分恰当,之前看不懂是因为被成功误 ...
- [转]Javascript中的自执行函数表达式
[转]Javascript中的自执行函数表达式 本文转载自:http://www.ghugo.com/javascript-auto-run-function/ 以下是正文: Posted on 20 ...
- Javascript 闭包与高阶函数 ( 二 )
在上一篇 Javascript 闭包与高阶函数 ( 一 )中介绍了两个闭包的作用. 两位大佬留言指点,下来我会再研究闭包的实现原理和Javascript 函数式编程 . 今天接到头条 HR 的邮件,真 ...
- 五十行javascript代码实现简单的双向数据绑定
五十行javascript代码实现简单的双向数据绑定 Vue框架想必从事前端开发的同学都使用过,它的双向数据绑定机制能给我们带来很大的方便.今天闲着没事,尝试着实现一下双向数据绑定,接下来给大家分享一 ...
- javascript编写一个简单的编译器(理解抽象语法树AST)
javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下: ...
- 前端笔记知识点整合之JavaScript(四)关于函数、作用域、闭包那点事
一.自定义函数function 函数就是功能.方法的封装.函数能够帮我们封装一段程序代码,这一段代码会具备某一项功能,函数在执行时,封装的这一段代码都会执行一次,实现某种功能.而且,函数可以多次调用. ...
- 前端笔记之JavaScript(四)关于函数、作用域、闭包那点事
一.自定义函数function 函数就是功能.方法的封装.函数能够帮我们封装一段程序代码,这一段代码会具备某一项功能,函数在执行时,封装的这一段代码都会执行一次,实现某种功能.而且,函数可以多次调用. ...
随机推荐
- 教你如何使用php session
原文网址:http://www.jb51.net/article/42500.htm 学会php session可以在很多地方使用,比如做一个后台登录的功能,要让程序记住用户的session,其实 ...
- Java_一些特殊的关键字详(?)解
1. native. 在看JDK源码时,想知道Math包里比如cos, sin等函数是如何实现的(猜想的是用他们在0点的泰勒展开式近似),但是打开之后却发现只有一个函数声明,并且有关键字native, ...
- Creating List Item in Oracle D2k
Special Tips for List Items in Oracle D2k In this section, I shall discuss some special tips and tec ...
- form 登陆跳转页面练习(未连接数据库)和连接数据库版
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- Intellij IDEA中使用Struts2
据说struts2中有很多的漏洞, 不过作为学习我也就用了吧, 因为书上面是按着这个讲的呀. 难怪官网上也没有struts2.2.1的版本的下载. 1. 下载struts2.2.1 ga版本 2. 新 ...
- poj 1265 Area (Pick定理+求面积)
链接:http://poj.org/problem?id=1265 Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- C# 线程(五):线程池
From : http://kb.cnblogs.com/page/42531/ 在多线程的程序中,经常会出现两种情况: 一种情况: 应用程序中,线程把大部分的时间花费在等待状态,等待某个事件发生,然 ...
- XAF实现运行时填加验证规则并保存到数据库中
有几种方法可以用来声明一个验证规则.最常用的方法是使用对应的Attribute来定义.详见这里.验证模块还允许您通过在业务类实现 IRuleSource 接口定义自定义的验证规则的来源. IRuleS ...
- LINQ之路 5:LINQ查询表达式
书写LINQ查询时又两种语法可供选择:方法语法(Fluent Syntax)和查询表达式(Query Expression). LINQ方法语法的本质是通过扩展方法和Lambda表达式来创建查询.C# ...
- EF中使用SQL语句或存储过程(小笔记)
1.无参数查询 var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToLis ...