在Vue中实现随hash改变响应菜单高亮

在Vue中实现随hash改变响应菜单高亮的完整攻略如下:

1. 绑定类样式

在Vue中,我们可以使用:class属性绑定给定的class名称。因此,我们可以在菜单项中使用一个计算属性来决定当前菜单是否被选中,并在该菜单项上绑定class进行高亮显示。

示例代码:

<template>
  <div id="app">
    <ul>
      <li :class="{ 'active': isCurrent('home') }"><a href="#home">Home</a></li>
      <li :class="{ 'active': isCurrent('about') }"><a href="#about">About</a></li>
      <li :class="{ 'active': isCurrent('contact') }"><a href="#contact">Contact</a></li>
    </ul>
  </div>
</template>

<script>
export default {
  methods: {
    isCurrent(hash) {
      return window.location.hash === '#' + hash;
    }
  }
}
</script>

<style>
.active {
  background-color: #f00;
  color: #fff;
}
</style>

在该示例中,我们在每个菜单项上使用:class属性,并使用对象语法绑定样式类名。对象中的键是要应用的样式类名,值是布尔表达式,根据表达式求值结果来决定是否应用该样式类。例如,当isCurrent('home')返回true时,菜单项上的'active'类将被添加。

isCurrent方法中,我们检查window.location.hash是否与指定的哈希值匹配。如果匹配,我们返回true,否则返回false。这使得每次哈希值改变时,我们都可以通过重新计算绑定的类样式来更新菜单项的高亮显示状态。

2. 监听hashchange事件

虽然绑定类样式方式可以实现菜单高亮效果,但需要在组件渲染后才会生效。另一种实现方式是使用window对象的hashchange事件来实时更新菜单高亮状态。

示例代码:

<template>
  <div id="app">
    <ul>
      <li :class="{ 'active': current === 'home' }"><a href="#home">Home</a></li>
      <li :class="{ 'active': current === 'about' }"><a href="#about">About</a></li>
      <li :class="{ 'active': current === 'contact' }"><a href="#contact">Contact</a></li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      current: ''
    }
  },
  mounted() {
    window.addEventListener('hashchange', this.updateCurrent);
    this.updateCurrent(); // 初始化当前选中菜单
  },
  beforeDestroy() {
    window.removeEventListener('hashchange', this.updateCurrent);
  },
  methods: {
    updateCurrent() {
      this.current = window.location.hash.substr(1); // 去掉hash符号
    }
  }
}
</script>

<style>
.active {
  background-color: #f00;
  color: #fff;
}
</style>

在该示例中,我们创建了一个current数据属性来表示当前选中的菜单项。在组件挂载后,我们绑定了一个hashchange事件处理函数updateCurrent,以便在hash值改变时及时更新current属性。我们同时也调用了updateCurrent方法,以确保在组件挂载时初始化当前选中菜单。

updateCurrent方法中,我们使用window.location.hash获取当前的hash值,并使用substr方法去掉hash符号。这使得在更新current属性时,我们只需要存储菜单项的标识符,而不是整个hash值。

在组件销毁前,我们移除了hashchange事件监听器,以防止出现内存泄漏等问题。

通过这两种方式,我们可以方便快捷地实现随hash值变化而更新菜单高亮的功能,提升网页的用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Vue中实现随hash改变响应菜单高亮 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • ExtJs的Date格式字符代码

    以下是“ExtJs的Date格式字符代码”的完整攻略。 一、什么是Date格式字符代码? 在ExtJs中,Date类是与日期和时间相关的一个重要类。在将日期或时间数据格式化为字符串时,需要使用Date格式字符代码。Date格式字符代码是指日期/时间格式字符串中的特殊字符代码,用于表示日期或时间的各个部分。常见的Date格式字符代码包括年份、月份、日期、星期、…

    JavaScript 2023年6月10日
    00
  • JavaScript中关于Object.create()的用法

    首先我们来讲一下Object.create()方法。它是JavaScript中一个非常重要的方法,用于创建一个新对象,同时可以将其原型指向另一个对象,也可以添加新的属性和方法。下面就来详细介绍一下Object.create()的用法: 基本语法 Object.create()方法的基本语法如下: Object.create(proto[, propertie…

    JavaScript 2023年5月27日
    00
  • javascript遍历json对象的key和任意js对象属性实例

    我们来详细讲解JavaScript如何遍历JSON对象的key和任意JS对象属性实例。 遍历JSON对象的key 在JavaScript中,我们可以使用for-in循环来遍历JSON对象的key。示例如下: const obj = {name: ‘张三’, age: 20, gender: ‘男’}; for (let key in obj) { conso…

    JavaScript 2023年5月27日
    00
  • Javascript Math log() 方法

    JavaScript中的Math.log()方法是用于计算一个数的自然对数的函数。以下是关于Math.log()方法的完整攻略,包含两个示例。 JavaScript Math对象的log()方法 JavaScript Math对象中的log()方法用于计算一个数的自然对数的函数。下面是log()方法的语法: Math.log(x) 其中,x是一个必需的参数,…

    JavaScript 2023年5月11日
    00
  • js的image onload事件使用遇到的问题

    下面是详细解释和示例: 关于 image onload 事件 Image 对象是 JavaScript 用于载入图像的对象。Image 对象的 onload 事件在图像载入完成时触发,可以用于检测图像是否成功加载,并在成功后执行其他操作。当然,如果图像加载失败,onload 事件是不会被触发的。 经典的 image onload 示例 以下是一个完整的 im…

    JavaScript 2023年5月19日
    00
  • JavaScript高级程序设计 学习笔记 js高级技巧

    JavaScript高级程序设计 学习笔记 js高级技巧 概述 《JavaScript高级程序设计》是一本深入讲解JavaScript核心概念和高级技巧的经典著作。对于想要深入学习JavaScript的开发者来说,这本书是非常好的选择。本文将会分享我对该书学习过程的笔记和总结。 学习笔记 第一部分 基础知识 第一部分主要介绍了一些JavaScript的基础知…

    JavaScript 2023年5月18日
    00
  • JavaScript 对象不变性介绍

    JavaScript 对象不变性介绍 JavaScript 中对象的不变性指的是:对象一旦被创建后,就无法更改它的属性和方法,直到对象被销毁。这种特性可以帮助我们编写更为健壮的代码,提高代码的可维护性和可预测性。 实现对象不变性的主要方法有三种:使用 Object.freeze() 方法、使用 Object.seal() 方法,以及使用原型链来限制属性的增删…

    JavaScript 2023年5月18日
    00
  • js实现跳一跳小游戏

    JS实现跳一跳小游戏,主要分为以下几个步骤: HTML结构:在HTML中需要准备一个游戏容器div和一个小人的img标签。 <div id="game-container"> <img src="little-man.png" id="little-man"> <div…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部