请使用插槽vm.$slots实现一个导航栏结构

<!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>导航栏</title>

  <!-- 引入vue.js -->

  <script src="vue.js"></script>

  <style>

    * {

      margin: 0;

      padding: 0

    }

    ul {

      list-style: none;

    }

    .c-nav {

      width: 900px;

      height: 42px;

      margin: 0 auto;

      border-radius: 5px;

      position: relative;

    }

    .c-nav li {

      float: left;

      width: 83px;

      text-align: center;

      line-height: 42px;

    }

    .c-nav li a {

      color: #333;

      display: inline-block;

      height: 42px;

    }

    header {

      background: #ccc;

    }

    .c-nav li.current a {

      color: red;

    }

  </style>

</head>

<body>

  <div id="app">

    <my-component>

      <!-- 定义导航栏结构 -->

      <template v-slot:header>

        <div id="c_nav" class="c-nav">

          <span class="cloud"></span>

          <ul ref='nav'>

            <li v-bind:class="{currentName}" v-for="item,key in list" @mouseenter="current(key)" @mouseleave="cancel()"

              :id=key>

              <a href="#">{{item}}</a>

            </li>

          </ul>

        </div>

      </template>

    </my-component>

  </div>

  <script>

    // 注册组件

    Vue.component('my-component', {

      render(createElement) {

        return createElement('div', [

          createElement('header', this.$slots.header),

        ])

      }

    })

    var vm = new Vue({

      el: '#app',

      // 定义初始数据

      data: {

        list: ['首页', '简介', '信息', '活动', '师资力量'],

        currentName: '',

      },

      methods: {

        // 定义事件处理函数

        current(key) {

          vm.$refs.nav.getElementsByTagName('li')[key].className = 'current';

        },

        cancel() {

          for (var i = 0; i < vm.$refs.nav.getElementsByTagName('li').length; i++) {

            vm.$refs.nav.getElementsByTagName('li')[i].className = ''

          }

        }

      }

    })

  </script>

</body>

</html>

结果截图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Werfgf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值