Показать подменю при помощи мыши Enter Vuejs - PullRequest
0 голосов
/ 02 мая 2020

Извините, я действительно новичок во всем этом.
Я пытаюсь отобразить подменю при наведении курсора на пункт меню. Мне были даны подсказки по записи индекса пунктов меню и записи логического значения того, наводит ли пользователь курсор мыши на контейнер навигации верхнего меню. Однако я не знаю, как их использовать для создания условных визуализаций для подменю.
Вот что я пробовал:

HTML:

<div id="vuemain">
<nav v-on:mouseover="mouseOverNav" v-on:mouseleave="mouseLeaveNav" class="pure-menu pure-menu-horizontal">
            <ul id="topmenu" class="pure-menu-list">
                <li v-for="(item, index) in topmenu" v-on:mouseover="mouseOver(index)" class="pure-menu-item">
                <a v-bind:href="item.url" class="pure-menu-link">{{ item.title }}</a>
                </li>
            </ul>
            <div class="pure-menu">
                <ul id="submenu" class="pure-menu-list">
                    <li v-if= "topmenuhover == true" class="pure-menu-item">
                    <a v-bind:href="topmenu[topmenuitem].submenus.url" class="pure-menu-link">{{ topmenu[topmenuitem].submenus.title }}</a></li>
                </ul>
            </div>
</nav>
</div>

JS:

var vueinst = new Vue({
el: '#vuemain',
data: {
topmenuitem : -1,
topmenuhover : false,
topmenu: [
    { title:'Home', url:'/', submenus: [] },
    { title:'About', url:'/about', 
        submenus: [
            { title:'Who we are',   url:'/about#us' },
            { title:'What we do',   url:'/about#store' },
            { title:'Our range',     url:'/about#range' }
        ]
    },
    { title:'Contact Us',   url:'/contact', 
        submenus: [
            { title:'Information',   url:'/contact#info' },
            { title:'Returns',   url:'/contact#return' },
            { title:'Locate Us',     url:'/contact#locate' }
        ]
    }
    ]
},
methods: {
mouseOver: function(index){
    this.topmenuitem=index;
},
mouseOverNav: function(){
  this.topmenuhover = true;
},
mouseLeaveNav: function(){
  this.topmenuhover = false;
}
}
});

Может кто-нибудь помочь мне с этим? Спасибо!

1 Ответ

0 голосов
/ 02 мая 2020

Часть Javascript должна сделать свое дело, вам просто нужно немного изменить шаблон, чтобы фактически отобразить подменю. Вот как вы можете это сделать:

var vueinst = new Vue({
  el: "#vuemain",
  data: {
    topmenuitem: -1,
    topmenuhover: false,
    topmenu: [
      { title: "Home", url: "/", submenus: [] },
      {
        title: "About",
        url: "/about",
        submenus: [
          { title: "Who we are", url: "/about#us" },
          { title: "What we do", url: "/about#store" },
          { title: "Our range", url: "/about#range" },
        ],
      },
      {
        title: "Contact Us",
        url: "/contact",
        submenus: [
          { title: "Information", url: "/contact#info" },
          { title: "Returns", url: "/contact#return" },
          { title: "Locate Us", url: "/contact#locate" },
        ],
      },
    ],
  },
  methods: {
    mouseOver: function (index) {
      this.topmenuitem = index;
    },
    mouseOverNav: function () {
      this.topmenuhover = true;
    },
    mouseLeaveNav: function () {
      this.topmenuhover = false;
    },
  },
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="vuemain">
  <nav v-on:mouseover="mouseOverNav" v-on:mouseleave="mouseLeaveNav" class="pure-menu pure-menu-horizontal">
    <ul id="topmenu" class="pure-menu-list">
      <li v-for="(item, index) in topmenu" v-on:mouseover="mouseOver(index)" class="pure-menu-item">
        <a v-bind:href="item.url" class="pure-menu-link">{{ item.title }}</a>
      </li>
    </ul>
    <div class="pure-menu">
      <ul v-if="topmenuhover" id="submenu" class="pure-menu-list">
        <li v-for="subitem in topmenu[topmenuitem].submenus" class="pure-menu-item">
          <a v-bind:href="subitem.url" class="pure-menu-link">{{ subitem.title }}</a></li>
      </ul>
    </div>
  </nav>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...