美文网首页
使用函数封装组件-Tab组件

使用函数封装组件-Tab组件

作者: 能吃饭也能吃苦1236 | 来源:发表于2018-05-12 00:04 被阅读0次

Tab组件的html和css技巧

  • html技巧-分成菜单和面板两个部分


    1.png
<div class="tab"> /*放在同一个节点里,方便优化元素选择*/
        <ul class="tab-menu">  /*菜单*/
            <li class="first active">First</li>
            <li class="second">Second</li>
            <li class="third">Third</li>
        </ul>
        <div> /*面板*/
            <li class="panel">First</li>
            <li class="panel">Second</li>
            <li class="panel">Third</li>
        </div>
    </div>
  • css技巧-负margin产生缺口


    2.png
/*通过设置负margin和下边框的颜色(白色)产生缺口,具体参数需自己调试*/
margin-bottom: -3px;
border-color: #ccc #ccc #fff #ccc; /*设置边框颜色,顺序为上右下左*/

border: 1px solid transparent; /*设置1px透明边框*/
border-radius: 5px; /*设置边框圆角*/

/*可单独设置边框的四个圆角*/
border-top-right-radius: 5px;
border-top-left-radius: 5px;
border-bottom-right-radius: 5px;
border-bottom-left-radius: 5px;

使用JS触发事件

/*语法*/
var event = new Event(' ');  /* (' ')可填click,change等 */
要触发事件的元素.dispatchEvent(event); 

/*举例*/
var event = new Event('click'); /* click可以改变 */
lis[0].dispatchEvent(event); /*lis[0]表示要触发事件的元素*/
tab.querySelector('.tab-mune li.active').dispatchEvent(event); /*根据选中的元素触发事件:tab.querySelector('.tab-mune li.active')表示选中的元素*/

/*当需要找出Tab组件里里具有active项时,使用for循环语句触发事件*/
for (var i = 0; i < lis.length; i++) {
        if (lis[i].classList.contains('active')) {
            lis[i].dispatchEvent(event);
            break; /*找到active项就跳出循环*/
        }

使用函数封装组件-实现3个Tab组件

  • Tab组件结构完全相同
/*将tab当作函数的参数,调用相应的Tab*/
var tabs = document.querySelectorAll('.tab'); /*选中页面中的3个Tab*/
initTab(tabs[0]); /*调用第一个Tab*/
initTab(tabs[1]); /*调用第二个Tab*/
initTab(tabs[2]); /*调用第二个Tab*/

function initTab(tab) {  
  函数体
}
  • Tab组件的结构(菜单和面板选择器)不相同
/*将tab,菜单和面板选择器都当作函数的参数,调用相应的Tab,函数体内需要用if语句设置菜单选择器和面板选择器的默认值*/
var tabs = document.querySelectorAll('.tab'); /*选中页面中的3个Tab*/
initTab(tabs[0]); /*调用第一个Tab*/
initTab(tabs[1],'menu li',undefined); /*调用第二个Tab,'menu li'表示第一个Tab菜单不同的选择器,undefined(未定义)表示面板选择器的默认值,菜单选择器对应less代码需修改*/
initTab(tabs[2], undefined, '.pane'); /*调用第三个Tab,undefined(未定义)表示菜单选择器的默认值,'.pane'表示与第一个Tab面板不同的选择器,面板选择器对应less代码需修改*/

function initTab(tab,menuSelector,paneSelector) {  
/*if语句设置菜单选择器和面板选择器的默认值*/
  if (menuSelector == undefined) {
        menuSelector = '.tab-menu li'; /*菜单选择器的默认值为.tab-menu li*/
     }
if (paneSelector == undefined) {
         paneSelector = '.panel';  /*面板选择器的默认值为.panel*/
    }
}
 var lis = tab.querySelectorAll(menuSelector);
 var panels = tab.querySelectorAll(paneSelector);
  ......
  • 结合逻辑非和能够转换为false的语句精简if语句
    逻辑非:!
    能够转换为false的语句:
    null;
    NaN;
    0;
    空字符串(“”);
    undefined;
    if语句设置菜单选择器和面板选择器的默认值可精简为:
  if (!menuSelector) {
        menuSelector = '.tab-menu li'; /*菜单选择器的默认值为.tab-menu li*/
     }
if (!paneSelector) {
         paneSelector = '.panel';  /*面板选择器的默认值为.panel*/
    }
}

检测内容是否为空

/*当value的值为空时,用alert弹出警告提示*/
var value = Text.value; //<input type="text" value=" " class="text-input">中value的没有默认值有空格的时候什么也不会输出,空格也相当于内容,没有默认值可以不用写value
    console.log('hello', value);
    if (!value) {
        alert('请输入内容!');
        return;
    }

    var value = Text.value.trim();//用 text.value.trim() 去掉空格

逻辑或的使用方法

/*当num的值大于10或等于0时输出ok,否则输出num本身的值*/
 if(num > 10 || num == 0) {
        console.log('ok');
    }
  • 短路运算
function a() {
    console.log('a');
    return 1;
}

function b() {
    console.log('b');
    return 2;
}

var ret = a() || b();
console.log('result',ret);
/*运算结果为
a 
result 1
因为函数a的表达式返回1,即true,不会执行函数b*/
function a() {
    console.log('a');
    return 0;
}

function b() {
    console.log('b');
    return 2;
}

var ret = a() || b();
console.log('result',ret);
/*运算结果为
a 
b 
result 2
因为函数a的表达式返回0,即false,会执行函数b*/

因此,还可以精简if语句

menuSelector = menuSelector || '.tab-menu li';
paneSelector = paneSelector || ".panel";

对象-为了解决函数参数太多不好对应,函数参数最好不超过4个

  • 简化函数参数
 /*先将可选参数统一命名,然后将数据放到里面,中间用逗号分隔*/
var options = {     
    menuSelector: false,
    paneSelector: '.pane',
    autoPlay: true,
};
function initTab(tab, options) {
}
  • 使用options对象
initTab(tabs[0]);
initTab(tabs[1], {
    menuSelector: '.menu li'
});
var options = {
    menuSelector: false,
    paneSelector: '.pane',
    autoPlay: true,
};
initTab(tabs[2], {
    paneSelector: '.pane'
});

function initTab(tab, menuSelector, paneSelector,autoPlay) {
function initTab(tab, options) {
}

相关文章

  • 面向对象实战

    封装轮播组件 轮播 封装曝光加载组件 曝光加载 封装Tab 组件 Tab组件

  • 使用函数封装组件-Tab组件

    Tab组件的html和css技巧 html技巧-分成菜单和面板两个部分1.png css技巧-负margin产生缺...

  • 封装组件

    封装tab组件封装曝光加载组件封装轮播组件 代码

  • 面向对象实战

    1、tab组件封装2、轮播组件封装3、曝光组件封装

  • 面向对象实战

    题目1: 封装一个轮播组件轮播组件题目2: 封装一个曝光加载组件曝光加载组件题目3: 封装一个 Tab 组件Tab 组件

  • 高级任务三

    题目1: 封装一个轮播组件 轮播 题目2: 封装一个曝光加载组件 曝光 题目3: 封装一个 Tab 组件 tab 组件

  • 面向对象

    tab组件封装 轮播组件 曝光加载

  • 面向对象实战

    1.封装一个轮播组件 轮播组件效果 2.封装一个曝光加载组件 曝光组件效果 3.封装一个 Tab 组件 Tab栏切...

  • element table 二次封装

    在使用element-ui组件库时,通常需要二次封装组件 1. 封装 table+page 组件 2. 引用tab...

  • 高级-任务3

    封装一个轮播组件 封装一个曝光加载组件 封装一个 Tab 组件 封装一个 Modal 组件

网友评论

      本文标题:使用函数封装组件-Tab组件

      本文链接:https://www.haomeiwen.com/subject/pkeqdftx.html