通用标签切换封装JS[0824更新]

展开/收缩

script部分:

/**************************************

*Filename:      setTab标签切换js

*Version:       2.0.0(2009-08-24)

*Author:        jasy[TMUED]


参数说明:

id1:标签切换父容器的ID

tag1:标签切换的相应标签

tabclass:标签选中状态的class

id2:切换内容的父容器ID

tag2:切换内容的相应子标签

changeEvent:标签切换的触发事件(值为click时为点击切换,值为hover时为鼠标经过切换)

changeTime:是否定时切换changeTime值即为定时切换间隔时间(毫秒为单位),无则不定时切换

isClick:是否单击开关内容区(可选true或false值);

isClickAll:是否单独开关内容区(可选true或false值);

fadeTime:是否渐显效果,值为渐显速度(毫秒为单位).无值则为无渐显动画;

(提示:IE下id2的tag2须CSS触发IE的layout属性alpha值才有效,例如设置zoom:1.)

isReturnFalse:是否return false;

isConIdNum:是否内容区以id+数字下标的方式[下标从1开始].

onNum:设置默认第几个标签打开

isOpenOne:是否默认打开一个,false则为全关闭

***************************************/


//标签切换主函数
function j_setTab(tabId, tag1, tabclass, conId, tag2, changeEvent, changeTime, isClick, isClickAll, fadeTime, isReturnFalse, isConIdNum, onNum ,isOpenOne) {

onNum–;

var tli = document.getElementById(tabId).getElementsByTagName(tag1);

if (!isConIdNum) {

var cli = document.getElementById(conId).getElementsByTagName(tag2);

}


var opaStep = 0.1;

var isScroll = true;
//初始化设置所有

for (i = 0; i < tli.length; i++) {

tli[i].className = ”;

if (isConIdNum) {

document.getElementById(conId + (i+1)).style.display = “none”;

} else {

cli[i].style.display = “none”;

}

}

//设置当前

if(isOpenOne){

tli[onNum].className = tabclass;

}
/*    setTabCon(onNum);*/

if (isConIdNum) {

document.getElementById(conId + (onNum+1)).style.display = “block”;

} else {

if(isOpenOne){

cli[onNum].style.display = “block”;

}

}
    //遍历元素执行函数

for (i = 0; i < tli.length; i++) {

tli[i].value = i;

tli[i].onmouseout = function() {

isScroll = true;

}

tli[i].onmouseover = function() {

isScroll = false;

}

if (changeEvent == “click”) {

tli[i].onclick = function() {

setTabCon(this.value);

if (isReturnFalse) {

return false;

}

}

} else if (changeEvent == “hover”) {

tli[i].onmouseover = function() {

setTabCon2(this.value);

isScroll = false;

}

tli[i].onclick = function() {

setTabCon(this.value);

if (isReturnFalse) {

return false;

}

}

}

}

//设置标签标题与内容切换[对应click事件]

function setTabCon(n) {

if (isClickAll) {

tli[n].className = (tli[n].className == tabclass) ? “”: tabclass;

if (fadeTime) {

if (isConIdNum) { (document.getElementById(conId + (n+1)).style.display == “block”) ? fadeOut(document.getElementById(conId + (n+1))) : fadeIn(document.getElementById(conId + (n+1)));

} else { (cli[n].style.display == “block”) ? fadeOut(cli[n]) : fadeIn(cli[n]);

}

} else {

if (isConIdNum) {

document.getElementById(conId + (n+1)).style.display = (document.getElementById(conId + (n+1)).style.display == “block”) ? “none”: “block”;

} else {

cli[n].style.display = (cli[n].style.display == “block”) ? “none”: “block”;

}

}

} else if (isClick) {

for (j = 0; j < tli.length; j++) {

if (n == j) {

tli[j].className = (tli[j].className == tabclass) ? “”: tabclass;

} else {

tli[j].className = “”;

}

if (isConIdNum) {

if (fadeTime) {

if (n == j) {

if (document.getElementById(conId + (j+1)).style.display == “none”) {

fadeIn(document.getElementById(conId + (j+1)));

} else {

fadeOut(document.getElementById(conId + (j+1)))

}

} else {

document.getElementById(conId + (j+1)).style.display = “none”;

/*fadeOut(document.getElementById(conId+j));*/

}

} else {

if (n == j) {

document.getElementById(conId + (j+1)).style.display=(document.getElementById(conId + (j+1)).style.display == “none”)?’block’:'none’;

} else {

document.getElementById(conId + (j+1)).style.display = “none”;

/*fadeOut(cli[j]);*/

}

}

} else {

if (fadeTime) {

if (n == j) {

if (cli[j].style.display == “none”) {

fadeIn(cli[j]);

} else {

fadeOut(cli[j])

}

} else {

cli[j].style.display = “none”;

/*fadeOut(cli[j]);*/

}

} else {

if (n == j) {

cli[j].style.display=(cli[j].style.display == “none”)?’block’:'none’;

} else {

cli[j].style.display = “none”;

/*fadeOut(cli[j]);*/

}

}

}

}

onNum = n;

} else {

for (j = 0; j < tli.length; j++) {

tli[j].className = n == j ? tabclass: “”;

if (isConIdNum) {

if (fadeTime) {

if (n == j) {

if (document.getElementById(conId + (j+1)).style.display == “none”) {

fadeIn(document.getElementById(conId + (j+1)));

}

} else {

document.getElementById(conId + (j+1)).style.display = “none”;

/*fadeOut(document.getElementById(conId+(j+1)));*/

}

} else {

document.getElementById(conId + (j+1)).style.display = n == j ? “block”: “none”;

}

} else {

if (fadeTime) {

if (n == j) {

if (cli[j].style.display == “none”) {

fadeIn(cli[j]);

}

} else {

cli[j].style.display = “none”;

/*fadeOut(cli[j]);*/

}

} else {

cli[j].style.display = n == j ? “block”: “none”;

}

}

}

onNum = n;

}

}

//设置标签标题与内容切2[对应hover事件]

function setTabCon2(n) {

for (j = 0; j < tli.length; j++) {

tli[j].className = n == j ? tabclass: “”;

if (isConIdNum) {

if (fadeTime) {

if (n == j) {

if (document.getElementById(conId + (j+1)).style.display == “none”) {

fadeIn(document.getElementById(conId + (j+1)));

}

} else {

document.getElementById(conId + (j+1)).style.display = “none”;

/*fadeOut(document.getElementById(conId+(j+1)));*/

}

} else {

document.getElementById(conId + (j+1)).style.display = n == j ? “block”: “none”;

}

} else {

if (fadeTime) {

if (n == j) {

if (cli[j].style.display == “none”) {

fadeIn(cli[j]);

}

} else {

cli[j].style.display = “none”;

/*fadeOut(cli[j]);*/

}

} else {

cli[j].style.display = n == j ? “block”: “none”;

}

}

}

onNum = n;

}

  //设置透明度

function setAlpha(obj, opa) {

document.all ? obj.style.filter = “Alpha(opacity=” + opa * 100 + “)”: obj.style.opacity = opa;

}

  //渐显

function fadeIn(obj) {

obj.style.display = “block”;

var opa = 0;

function setFadeIn() {

if (opa < 1) {

setAlpha(obj, opa);

opa += opaStep;

setTimeout(setFadeIn, fadeTime);

}

}

setFadeIn();

}

//渐隐

function fadeOut(obj) {

var opa = 1;

function setFadeOut() {

if (opa > 0) {

setAlpha(obj, opa);

opa -= opaStep;

setTimeout(setFadeOut, fadeTime);

} else {

obj.style.display = “none”;

}

}

setFadeOut();

}

  //定时切换

if (changeTime) {

function setTiming() {

if (isScroll) {

setTabCon2(onNum);

onNum++;

onNum = (onNum == tli.length) ? 0 : onNum;

}

setTimeout(setTiming, changeTime);

}

setTiming();

}

}


页面HTML调用部分·[示例]:
<script type=”text/javascript”> setTab(‘photo-tab’, ‘li’, ‘on’, ‘photo-tab’, ‘div’,'hover’,2000,false,false,20,false,false);</script>

JavaScript判断浏览器类型及版本

展开/收缩

<script type=”text/javascript”>
        var Sys = {};
        var ua = navigator.userAgent.toLowerCase();
        if (window.ActiveXObject)
             Sys.ie = ua.match(/msie ([\d.]+)/)[1]
        else if (document.getBoxObjectFor)
             Sys.firefox = ua.match(/firefox\/([\d.]+)/)[1]
        else if (window.MessageEvent && !document.getBoxObjectFor)
             Sys.chrome = ua.match(/chrome\/([\d.]+)/)[1]
        else if (window.opera)
             Sys.opera = ua.match(/opera.([\d.]+)/)[1]
        else if (window.openDatabase)
             Sys.safari = ua.match(/version\/([\d.]+)/)[1];
      
       //以下进行测试
        if(Sys.ie) document.write(‘IE: ‘+Sys.ie);
        if(Sys.firefox) document.write(‘Firefox: ‘+Sys.firefox);
        if(Sys.chrome) document.write(‘Chrome: ‘+Sys.chrome);
        if(Sys.opera) document.write(‘Opera: ‘+Sys.opera);
        if(Sys.safari) document.write(‘Safari: ‘+Sys.safari);

    </script>

js获取光标位置,兼容各浏览器

展开/收缩

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>js获取光标位置</title>
<script type=”text/javascript”>
/**
* 获取光标所在的字符位置
* @param obj 要处理的控件, 支持文本域和输入框
* @author hotleave
*/

function getPosition(obj){
//alert(obj.tagName);
var result = 0;
if(obj.selectionStart){ //非IE浏览器
   result = obj.selectionStart
}else{ //IE
   var rng;
   if(obj.tagName == “TEXTAREA”){ //如果是文本域
    rng = event.srcElement.createTextRange();
    rng.moveToPoint(event.x,event.y);
   }else{ //输入框
    rng = document.selection.createRange();
   }
   rng.moveStart(“character”,-event.srcElement.value.length);
   result = rng.text.length;
}
return result;
}

function getValue(obj){
     var pos = getPosition(obj);
//alert(pos);
alert(obj.value.substr(0,pos)+” [这里是添加的内容] “+obj.value.substr(pos,obj.value.length));
}
</script>
</head>
<body>
<input type=”text” value=”你好,Amethyst!” onmouseup=”getValue(this)” style=”display:block”>
<textarea rows=”6″ cols=”60″ onmouseup=”getValue(this)”>Amethyst, 你好.</textarea>
</body>
</html>

scrollLeft,scrollWidth,clientWidth,offsetWidth之完全详解

展开/收缩

scrollHeight: 获取对象的滚动高度。
scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
offsetHeight:获取对象相对于版面或由父坐标 offsetParent 属性指定的父坐标的高度
offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置
offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置
event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标

event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标
document.documentElement.scrollTop 垂直方向滚动的值
event.clientX+document.documentElement.scrollTop 相对文档的水平座标+垂直方向滚动的量

以上主要指IE之中,FireFox差异如下:
IE6.0、FF1.06+:
clientWidth = width + padding
clientHeight = height + padding
offsetWidth = width + padding + border
offsetHeight = height + padding + border
IE5.0/5.5:
clientWidth = width – border
clientHeight = height – border
offsetWidth = width
offsetHeight = height
(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)

posLeft与left区别

展开/收缩

测试代码:

<div id=”cone” style=” position:absolute; left:100px”> <img src=”cone.jpg” /></div>

<input type=”button” onclick=”alert(document.getElementById(‘cone’).style.left)” value=”Left”>

<input type=”button” onclick=”alert(document.getElementById(‘cone’).style.posLeft)” value=”posLeft”>


所以style.posLeft获取的是数值部分(形如100);style.left获取的是字符串(形如100px);

因FF无style.posLeft属性,可考虑用offsetLeft替换,(形如document.getElementById(‘cone’).offsetLeft,此处无style.)。



替代window.event.srcElement效果的可兼容性的函数

展开/收缩
getEvent()方法可模拟window.event效果



function
    getEvent()
{
    
var    i   =   0;
    
if(document.all){
return    window.event;

       }

     func
= getEvent.caller;
    
while(func != null)
    
{
        
var    arg0 = func.arguments[0];
        
if(arg0)
        
{
            
if(arg0.constructor == MouseEvent)
            
{
                
return    arg0;
             }

         }

         func
= func.caller;
     }

    
return   null;
}

函数中要引用须传参e才能等到:

function buttonOver(e)
{
     e   
=    getEvent();
    
var obj = e.srcElement   ||    e.target;
    
if (obj.runtimeStyle){
         obj.runtimeStyle.cssText
= background-color:#FFFFFF;
     }

    
else
     obj.style.background
= #FFFFFF;
}

>>
后台管理 github RSS 微博 简历
RSS订阅