前端—我的第一篇博客 梦开始的地方(面向对象版tab栏)
这是我的第一篇博客 博客生涯才开始 但是人生已经过去了二十个年头了 才开始弄这个 也没搞得太懂 我原本的想法是想搞个源代码上来 但是看了半天好像就只能传html源代码 那我还有css js的部分呢 我还想给大伙看看功能呢 其实我老早就想开个博客了 一直没找到在哪里来弄 学倒是一直在学 就这么学下来了 从html css h5c3 移动端适配 js基本语法 jQuery 到现在的js高级语法 es6 只不过前面好像也没什么需要讲的 现在才刚刚 开始 今天搞了个 面向对象版的tab栏 整点图片 上来把 我的话和经验也都在图片里 新手新手
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>面向对象 Tabtitle>
<link rel="stylesheet" href="./styles/tab.css">
<link rel="stylesheet" href="./styles/style.css">
head>
<body>
<main>
<h4>
Js 面向对象 动态添加标签页
h4>
<div class="tabsbox" id="tab">
<nav class="fisrstnav">
<ul>
<li class="liactive"><span>测试1span><span class="iconfont icon-guanbi">span>li>
<li><span>测试2span><span class="iconfont icon-guanbi">span>li>
<li><span>测试3span><span class="iconfont icon-guanbi">span>li>
ul>
<div class="tabadd">
<span>+span>
div>
nav>
<div class="tabscon">
<section class="conactive">测试1section>
<section>测试2section>
<section>测试3section>
div>
div>
main>
<script src="./js/index.js">script>
body>
html>
// 分析 整个tab栏就是他的对象 然后下来有 切换 新增 删除 修改的内容 var that class Tab { constructor(id) { that = this // 1.获取元素 this.main = document.querySelector(id) /* // 2.切换功能 先获取li和section this.lis = this.main.querySelectorAll('.fisrstnav li') this.sections = this.main.querySelectorAll('section') */ // 3.新增功能 获取元素 this.add = this.main.querySelector('.tabadd') this.ul = this.main.querySelector('ul') this.fsections = this.main.querySelector('.tabscon') this.init() } // 3.5 获取最新的li和section updateTogle() { this.lis = this.main.querySelectorAll('.fisrstnav li') this.sections = this.main.querySelectorAll('section') // 4.获取删除按钮 由于这个也是也一直在动态增加的 所以需要动态获取 this.removes = this.main.querySelectorAll('.icon-guanbi') // 5.1动态获取第一个span的标签 this.spans = this.main.querySelectorAll('li span:first-child') } // 2.1初始化函数 因为页面一刷新就会要绑定事件 需要一实例化 就绑定事件 就要一个初始化函数在构造函数里被调用 init() { // 3.5获取最新数据 this.updateTogle() // 3.1新增按钮就一个 所以不需要写在循环里、 this.add.onclick = this.addTab // 2.2给lis绑定点击事件 for (var i = 0; i < this.lis.length; i++) { // 2.4要完成对应的section的切换 需要给每个li添加一个index this.lis[i].setAttribute('data-index', i) this.lis[i].onclick = this.toggleTab // 4.1删除按钮点击事件 this.removes[i].onclick = this.removeTab // 5.添加功能就是 对li section做操作 就不需要获取了 直接绑定双击事件 this.spans[i].ondblclick = this.insertTab this.sections[i].ondblclick = this.insertTab } } // 2.4 给其他事件清空类名操作 因为后面可能还会用到 封装一个函数 clearClass() { for (var i = 0; i < this.lis.length; i++) { this.lis[i].classList.remove('liactive') that.sections[i].classList.remove('conactive') } } // 切换 toggleTab() { that.clearClass() // 2.3在这里面完成切换功能 注意当前的this为点击的这个li this.classList.add('liactive') var index = this.getAttribute('data-index') // 注意 这个时候不能用this 要用controcutor里面的this that.sections[index].classList.add('conactive') } // 新增 addTab() { // 3.2点击新增就会增加一个li var li = '
不重要的css部分 可忽略
* { margin: 0; padding: 0; } ul li { list-style: none; } main { width: 960px; height: 500px; border-radius: 10px; margin: 50px auto; } main h4 { height: 100px; line-height: 100px; text-align: center; } .tabsbox { width: 900px; margin: 0 auto; height: 400px; border: 1px solid lightsalmon; position: relative; } nav ul { overflow: hidden; } nav ul li { float: left; width: 100px; height: 50px; line-height: 50px; text-align: center; border-right: 1px solid #ccc; position: relative; } nav ul li.liactive { border-bottom: 2px solid #fff; z-index: 9; } #tab input { width: 80%; height: 60%; } nav ul li span:last-child { position: absolute; user-select: none; font-size: 12px; top: -18px; right: 0; display: inline-block; height: 20px; } .tabadd { position: absolute; /* width: 100px; */ top: 0; right: 0; } .tabadd span { display: block; width: 20px; height: 20px; line-height: 20px; text-align: center; border: 1px solid #ccc; float: right; margin: 10px; user-select: none; } .tabscon { width: 100%; height: 300px; position: absolute; padding: 30px; top: 50px; left: 0px; box-sizing: border-box; border-top: 1px solid #ccc; } .tabscon section, .tabscon section.conactive { display: none; width: 100%; height: 100%; } .tabscon section.conactive { display: block; }