最近在给一个客户做一个zblog模板的时候需要用到一个页面中多处使用tab切换特效,做完后把代码整理了下,如果你也正好有此需求,直接复制代码即可。
tab切换js代码 一个页面可多处使用--js代码部分:
<script>
var fgm = {
$: function(id) {
return typeof id === "object" ? id : document.getElementById(id);
},
$$: function(tagName, oParent) {
return (oParent || document).getElementsByTagName(tagName);
},
$$$: function(className, element, tagName) {
var i = 0, aClass = [], reClass = new RegExp("(^|\\s)" + className + "(\\s|$)"), aElement = fgm.$$(tagName || "*", element || document);
for (i = 0; i < aElement.length; i++) reClass.test(aElement[i].className) && aClass.push(aElement[i]);
return aClass;
},
index: function(element) {
var aChildren = element.parentNode.children, i;
for(i = 0; i < aChildren.length; i++) if(aChildren[i] === element) return i;
return -1;
},
on: function(element, type, handler) {
return element.addEventListener ? element.addEventListener(type, handler, !1) : element.attachEvent("on" + type, handler);
},
bind: function(object, handler) {
return function() {
return handler.apply(object, arguments);
};
}
};
function Tab(id) {
var that = this;
this.obj = fgm.$(id);
this.oTab = fgm.$$$("tab", this.obj)[0];
this.aTab = fgm.$$("li", this.oTab);
this.oSwitch = fgm.$$$("switchBtn", this.oTab)[0];
this.oPrev = fgm.$$("a", this.oSwitch)[0];
this.oNext = fgm.$$("a", this.oSwitch)[1];
this.aItems = fgm.$$$("items", this.obj);
this.iNow = 0;
fgm.on(this.oSwitch, "click", fgm.bind(this, this.fnClick));
fgm.on(this.oTab, "click", fgm.bind(this, this.fnMouseOver));
}
Tab.prototype = {
fnMouseOver: function(ev) {
var oEv = ev || event,
oTarget = oEv.target || oEv.srcElement;
oTarget.tagName.toUpperCase() === "LI" && (this.iNow = fgm.index(oTarget));
this.fnSwitch();
},
fnClick: function(ev) {
var oEv = ev || event,
oTarget = oEv.target || oEv.srcElement,
i;
switch(fgm.index(oTarget)) {
case 0:
if(oTarget.className == "prev") {
this.aTab[this.iNow].style.display = "block";
this.iNow--;
};
break;
case 1:
if(oTarget.className == "next") {
for(i = 0; i < this.iNow; i++) this.aTab[i].style.display = "none";
this.iNow++;
};
break;
};
this.aTab[this.iNow].style.display = "block";
this.fnSwitch();
},
fnSwitch: function() {
for(var i = 0; i < this.aTab.length; i++) (this.aTab[i].className = "", this.aItems[i].style.display = "none");
this.aTab[this.iNow].className = "current";
this.aItems[this.iNow].style.display = "block";
this.oPrev.className = this.iNow == 0 ? "prevNot" : "prev";
this.oNext.className = this.iNow == this.aTab.length - 1 ? "nextNot" : "next";
}
};
//应用
fgm.on(window, "load", function() {
var aItem = fgm.$$$("item"),
i = 0;
for(; i < aItem.length; i++) new Tab(aItem[i]);
});
</script>注意,此js代码需要放在页面的</head>之前。
tab切换js代码 一个页面可多处使用--html代码部分:
<div class="item"> <div class="tab"> <ul> <li class="current">标题一</li> <li>标题二</li> <li>标题三</li> </ul> <span class="switchBtn"><a href="#" class="prevNot"></a><a href="#" class="next"></a></span> </div> <ul class="items" style="display:block;"> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> </ul> <ul class="items"> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> </ul> <ul class="items"> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> <li><a href="#">列表标题</a></li> </ul> </div>
此html代码可以在页面多处位置使用不会冲突,可以给"<ul>"或者"<div>"添加id属性,以实现不同位置不同显示效果。css代码就不上,可以根据自己的具体需求慢慢调整的,希望对大家有用。
相关推荐
- 支付宝支付后异步通知页面提示”支付签名校验失败,请联系管理员!“的原因和解决方法05-08
- zblog登录后台一直提示验证码错误的原因和解决方法03-01
- zblog使用api提交post数据提示419错误的原因和解决方法02-23
- vue3项目引入vant报错的错误原因和解决办法03-12
- zblog怎么截取指定字数的摘要?zblog摘要自定义截取方法介绍02-29
- 微信支付JSPAI调起支付后提示“该订单已过期,请重新下单”的解决办法06-11
- 宝塔一键迁移提示“连接服务器失败”的原因和解决办法05-16
- 微信小程序报错:operateWXDataForAd:fail的原因和解决办法05-14
- php保存添加bom头的txt文件和读取时去除txt的bom头05-02
- 小程序使用mp-html组件后输出空白的原因和解决办法04-08
欢迎 你 发表评论: 取消回复
- 最新文章
- 热文排行
- 最多评论
- 1天兴工作室多语言翻译插件 自动翻译多达12种语言 适合外贸站点06-23
- 2有道云翻译获取appid和seckey的详细步骤和截图06-22
- 3支付宝支付后异步通知页面提示”支付签名校验失败,请联系管理员!“的原因和解决方法05-08
- 4阿里云oss配置项获取步骤截图,包含ID和Secret、区域节点Endpoint、存储空间Bucket和资源访问域名04-14
- 5zblog登录后台一直提示验证码错误的原因和解决方法03-01
- 6zblog使用api提交post数据提示419错误的原因和解决方法02-23
- 7天兴工作室2025年春节放假公告01-25
- 8天兴用户中心插件“微信通知”功能设置教程11-09
- 9阿里云2024双11活动推荐 通过本站链接参与另外赠送本站代金券11-05
- 标签聚合
- ×3zblog标题×1ReWrite规则×1主题×1文章收藏×1zblogphp301×1天兴科技×1朋友圈×1漂浮广告×1随机tag×1emlog6介绍×1bom头×1ie浏览器测试工具×1奋斗×1扁平化×4zblog博客主题×1dedecms编码×1js配色×1emlog6×1授权失败×1搜索
最新评论
-
10-21老郭
可以直接用哦 文本内容 评论于:zblog插件:右下角网站公告
-
07-06
访客111 总之不是免费的午餐,不走某Z模式,难发展 评论于:关于zblog版权的说明
-
02-08
天兴工作室 并没有任何限制 -
02-08
访客 请问 zblog淘客主题 对使用者的要求是必须是企业吧? -
11-09
阿浩 大佬们,丢几个除了作者以外的演示站,我想看看大家的布局设置









鄂公网安备 42011102002962号