<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
*{margin: 0;padding: 0}
#wrap{width: 600px; margin:20px auto; font-size: 14px;border: 1px solid #ccc;}
#tabs{width: 100%; height: 40px; line-height: 40px;border-bottom: 1px solid #ccc;}
#tabs a{display: block;float: left; padding: 0 20px; text-decoration: none;}
#tabs a.tabactive{background: brown; color: #fff;}
#content{width: 100%; height: 400px;}
#content p{height: 400px; display: none}
#content p.conactive{display: block;}
</style>
</head>
<body>
<div id="wrap">
<div id="tabs">
<a class="tabactive" href="javascript:;">新闻</a>
<a href="javascript:;">国内</a>
<a href="javascript:;">国外</a>
</div>
<div id="content">
<p class="conactive">新闻</p>
<p>国内</p>
<p>国外</p>
</div>
</div>
<script>
window.onload = function () {
//保存this
let that = null;
//声明构造函数
class Tabs {
//构造器
constructor(id){
this.wrap = document.getElementById(id);
this.abtns = this.wrap.getElementsByTagName('a');
this.pcon = this.wrap.getElementsByTagName('p');
this.num = 0;
this.timer = null;
this.init()
}
//初始化
init(){
//保存this对象
that = this;
//执行自动播放功能
this.autoplay();
//执行点击切换功能
this.tab();
//鼠标移入时取消定时器
this.wrap.onmouseover = function(){
clearInterval(that.timer)
}
//鼠标离开时,开启自动轮播功能
this.wrap.onmouseleave = function(){
that.autoplay();
}
}
//点击切换
tab(){
for(let i=0;i<this.abtns.length;i++){
this.abtns[i].index = i;
this.abtns[i].onclick = function(){
//注意:这个函数里的this指向了abtn元素,想要使用实例中的this就要用之前保存的that来代替
clearInterval(that.timer)
//把点击元素的index赋值给实例上的num,以保证下次自动轮播时起始点正确
that.num = this.index
that.qiehuan()
}
}
}
//自动播放
autoplay(){
this.timer = setInterval(function(){
//注意:这个函数里的this指向了window,想要使用实例中的this就要用之前保存的that来代替
that.num++;
that.num %= that.abtns.length;
that.qiehuan()
},2000)
}
//切换效果
qiehuan(){
for(let i=0;i<that.abtns.length;i++){
that.abtns[i].className = ""
that.pcon[i].className = ""
}
that.abtns[that.num].className = "tabactive"
that.pcon[that.num].className = "conactive"
}
}
//生成实例
new Tabs('wrap')
}
</script>
</body>
</html>

最新文章

  1. 【JavaScript】操作Canvas画图
  2. gcc编译命令行依赖库的指定顺序
  3. JS Note1
  4. android gridview几个重要属性(android:listSelector自带内部padding分析)
  5. iOS7模拟器安装
  6. End Routine
  7. 帮朋友急招PHP、Android开发工程师 西安 工资8k-12k
  8. sublime Text Pastry使用
  9. 索引器(C# 编程指南)
  10. 关于cocos2d-x 与 cocos2d-html5 资源预加载的思考
  11. TCP-心跳
  12. 用命令行在github新建一个项目
  13. windows本地eclispe运行linux上hadoop的maperduce程序
  14. 【iCore4 双核心板_ARM】例程十六:USB_HID实验——双向数据传输
  15. POJ 1816 - Wild Words - [字典树+DFS]
  16. yii主题
  17. Kafka消费异常处理
  18. leetcode916
  19. 配置 Mysql 支持远程访问 并取消域名解析以提高链接速度
  20. DPDK网卡绑定

热门文章

  1. jquery实用应用之jquery操作radio、checkbox、select
  2. Python--day62--使用Bootstrap样式的出版社
  3. [转载] Solaris命令使用
  4. C# 判断两条直线距离
  5. Js 时间戳显示和计算时间间隔
  6. P1011 圆柱体的表面积
  7. iDrac6 虚拟控制台 连接失败
  8. python 批量生成xml标记文件(连通域坐标分割)
  9. mac如何查看已连接wifi的密码
  10. MySQL中的CHAR和VARCHAR到底支持多长?