美文网首页
01_11.实现tab功能

01_11.实现tab功能

作者: Robyn_Luo | 来源:发表于2017-11-24 20:12 被阅读0次
    1. 首先下载react以及browser.min.js

    http://www.react-cn.com/downloads.html
    https://www.npmjs.com/package/browser-js

    2. 实现效果
    3. 代码块:
    • html
    <!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>Document</title>
        <link rel="stylesheet" type="text/css" href="css/tab.css">
        <script src="../react.js"></script>
        <script src="../react-dom.js"></script>
        <script src="../browser.min.js"></script>
    </head>
    <body>
        <div id="app"></div>
    
        <!-- 别忘了设置type -->
        <script type="text/babel">
    
        // 创建一个AppTab组件, 注意react中元素的都是DOM属性, 其中class应该写成className
        var AppTab = React.createClass({
    
            // 该配置项与vue中的data一样, 需要定义成函数return一个对象的形式
            // 对象里面去编写组件内所需的数据
            getInitialState() {
                return {
                    menuList: ['国际大牌', '国妆名牌', '男士精品', '女士精品'],
                    mainList: ['imgs/guojidapai.jpg', 'imgs/guozhuangmingpin.jpg', 
                    'imgs/qingjieyongpin.jpg', 'imgs/nanshijingpin.jpg'],
                    focusIndex: 3
                };
            },
    
            // tab栏导航点击处理函数
            clickHandler(index) {
                console.log(index)
                // this.state.focusIndex = index; // 注意, 想要react自动更新视图, 不能手动修改值
                this.setState({
                    focusIndex: index             // 必须调用react提供的方法修改状态
                });
            },
    
            render() {
                return (
                    <div className="wrapper" id="wrapper">
                        <ul className="tab" id="tab-menu">
                            {
                                /* 定义的组件内部状态, 通过组件实例的state属性来访问 */ 
                                this.state.menuList.map((v, i) => {
                                    return (
                                        /* 这里绑定的事件处理函数, 从组件实例this身上取 */ 
                                        <li onClick={ this.clickHandler.bind(this, i) } className={ this.state.focusIndex == i? 'tab-item active': 'tab-item' } key={ v }>
                                            <span>◆</span>{ v }
                                        </li>
                                    )
                                })
                            }
                        </ul>
                        <div className="products" id="tab-main">
                            {
                                this.state.mainList.map((v, i) => {
                                    return (
                                        <div className={ this.state.focusIndex == i? "main selected": "main" } key={ v }>
                                            <a href="###"><img src={ v } alt=""/></a>
                                        </div>
                                    )
                                })
                            }
                        </div>
                    </div>
                );
            }
        });
    
        // 渲染AppTab组件
        ReactDOM.render(<div><AppTab/><AppTab/></div>, document.querySelector('#app'));
        </script>
    </body>
    </html>
    
    
    • css
    * {
        margin: 0;
        padding: 0;
    }
    ul {
        list-style: none;
    }
    .wrapper {
        width: 1000px;
        height: 475px;
        margin: 100px auto 0;
    }
    
    .tab {
        border: 1px solid #ddd;
        border-bottom: 0;
        height: 36px;
        width: 320px;
    }
    
    .tab li {
        position: relative;
        float: left;
        width: 80px;
        height: 34px;
        line-height: 34px;
        text-align: center;
        cursor: pointer;
        border-top: 4px solid #fff;
    }
    
    .tab span {
        position: absolute;
        right: 0;
        top: 10px;
        background: #ddd;
        width: 1px;
        height: 14px;
        overflow: hidden;
    }
    
    .products {
        width: 1002px;
        border: 1px solid #ddd;
        height: 476px;
    }
    
    .products .main {
        float: left;
        display: none;
    }
    
    .products .main.selected {
        display: block;
    }
    
    .tab li.active {
        border-color: red;
        border-bottom: 0;
    }
    
    

    相关文章

      网友评论

          本文标题:01_11.实现tab功能

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