用Vue插槽实现一个简单的电影网站导航栏,Vue实现一个简单的登录页面【自定义】

365 阅读1分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

用插槽实现一个导航栏

每次访问电影网站,都会看到一个导航栏,今天就仿照一个导航栏结构。 在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>导航栏</title>
    <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: rgb(253, 252, 252);
          display: inline-block;
          height: 42px;
        }
        header {
          background: rgb(0, 0, 0);
        }
        .c-nav li.current a {
          color: rgb(54, 17, 221);
          background-color: rgb(255, 0, 0);
        }
      </style>
      <script src="./vue.js"></script>
</head>
<body>
    <div id="app">
        <my-component>
          <!-- 定义导航栏结构 -->
          <template v-slot:header>
            <div id="c_nav" class="c-nav">
              <ul><li><a>电影院</a></li></ul>
              <ul ref='nav'>
                <li v-bind:class="name" v-for="item,key in list" @mouseenter="current(key)" @mouseleave="cancel(key)" :id=key>
                  <a href="https://www.baidu.com/">{{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: ['首页', '电影', '电视剧', '综艺', '动漫'],
            name:' '
            
          },
          methods: {
            // 定义事件处理函数
            current(key) {
              vm.$refs.nav.getElementsByTagName('li')[key].className = 'current'; //鼠标悬停
            },
            cancel(key) {
                vm.$refs.nav.getElementsByTagName('li')[key].className = ''; //鼠标离开
            }
          }
        })
      </script>    
</body>
</html>

电影网站的导航栏,哈哈

创建一个自定义插件

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登录页面</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <my-component><my-component/>
      </div>
      <script>
        // 定义一个MyPlugin(自定义插件)对象
        let MyPlugin = {}
        // 编写插件对象的install方法
        // install()方法有两个参数,第1个参数Vue是Vue的构造器,options是一个可选的配置对象。
        MyPlugin.install = function (Vue, options) {
          // 在插件中为Vue创建组件myComponent
          Vue.component('my-component', {
            template: '<button>{{msg}}</button>',
            data() {
              return {
                msg: '登录'
              }
            }
          })
        }
        // 调用Vue.use()方法安装插件,在第1个参数中传入插件对象MyPlugin,第2个参数传入可选配置。
        Vue.use(MyPlugin, {
          someOption: true
        })
        var vm = new Vue({
          el: '#app'
        })
      </script>
      
</body>
</html>

需要下载vue.js然后替换成自己的地址。