在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日

相关文章

  • 从零开始用electron手撸一个截屏工具的示例代码

    下面是从零开始用Electron手撸一个截屏工具的示例代码的攻略: 创建一个Electron项目 首先,我们需要使用npm来创建一个空的Electron项目,可以使用以下命令: npm init -y npm install electron –save-dev 安装完成后,我们需要在package.json文件中添加一个start script: &qu…

    JavaScript 2023年6月11日
    00
  • 魔鬼字典 JavaScript 笔记 代码比较多乱第3/3页

    下面是详细讲解“魔鬼字典 JavaScript 笔记 代码比较多乱第3/3页”的完整攻略。 1. 了解魔鬼字典的功能 魔鬼字典是一个基于 JavaScript 实现的词典工具,可以帮助用户查询单词的翻译、同义词、反义词和例句等信息。该工具的主要功能包括: 解析用户输入的单词,并根据单词的不同词性展示不同的内容。 可以查询单词的翻译、同义词、反义词和例句等信息…

    JavaScript 2023年5月19日
    00
  • js 函数式编程学习笔记

    下面是学习 js 函数式编程的完整攻略: 1. 学习函数式编程基础 函数式编程是一种编程范式,需要掌握一些基础概念和语法,例如: 纯函数:不会修改外部状态,返回结果只依赖于输入参数 函数柯里化:把接受多个参数的函数变换成接受一个单一参数的函数 高阶函数:函数可以作为参数或返回值使用 可以通过阅读函数式编程相关的书籍或文章来学习这些基础知识。推荐的书籍有《Ja…

    JavaScript 2023年6月10日
    00
  • js操作时间(年-月-日 时-分-秒 星期几)

    下面是JS操作时间的完整攻略。 获取当前时间 要获取当前时间,可以使用Date对象。该对象提供的方法可以获取当前时间的年、月、日、时、分、秒等信息。 const now = new Date(); console.log(now); // 输出当前时间的完整信息 const year = now.getFullYear(); // 获取当前年份 const …

    JavaScript 2023年5月27日
    00
  • Javascript类型判断相关例题及解析

    Javascript类型判断相关例题及解析 前言 在Javascript编程中,进行类型判断十分常见。需要熟悉Javascript中数据类型、类型判断方法以及常见类型判断例题的解析。在本篇文章中,我们将结合实例,深入分析Javascript中类型判断的相关知识点。 数据类型 Javascript中的数据类型分为基本数据类型和引用数据类型。 基本数据类型 Ja…

    JavaScript 2023年6月10日
    00
  • JS实现动态倒计时功能(天数、时、分、秒)

    实现动态倒计时功能是Web开发中常见的需求之一,JS是实现这一功能的重要工具之一。下面我会为你详细讲解如何使用JS实现动态倒计时,并提供两个详细的示例说明。 编写HTML结构 首先需要在HTML页面中添加需要倒计时的元素,可以使用HTML5中的<time>元素来显示时间。在这个例子中,我们将需要倒计时的元素放在<div>标签中。 &l…

    JavaScript 2023年5月27日
    00
  • js获取当前日期前七天的方法

    要获取当前日期前七天的方法,可以使用JavaScript中的Date对象进行操作。以下是具体步骤: 步骤 1:获取当前日期 使用JavaScript内置的Date对象,可以获取当前的年月日。 const today = new Date(); const year = today.getFullYear(); const month = today.getM…

    JavaScript 2023年6月10日
    00
  • 实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)

    实用的JS正则表达式 正则表达式是对字符串操作的一种极其强大的工具。在JavaScript中,正则表达式同样也是非常重要和常用的。本文将会讲解一些常用的正则表达式及其匹配规则。 1. 手机号正则表达式 手机号正则表达式的匹配规则如下: /^1[3456789]\d{9}$/ 其中: ^ 表示字符串开始位置; 1 表示以数字1开始; [3456789] 中括号…

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