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

yizhihongxing

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

相关文章

  • 基于原生JavaScript实现SPA单页应用

    基于原生JavaScript实现SPA单页应用攻略 简介 单页应用(Single Page Application,SPA)是一种基于Web浏览器的应用程序,整个应用程序只有一个HTML文件,页面切换时通过ajax与后端进行数据交互,然后动态更新Dom元素,从而实现页面的切换。 原生JavaScript是指不依赖第三方框架或库,只使用纯JavaScript进…

    JavaScript 2023年6月11日
    00
  • JS实现的进制转换,浮点数相加,数字判断操作示例

    JS实现的进制转换攻略: 对于进制转换,JS提供了parseInt和toString方法。其中parseInt方法可将其他进制的数字转换为十进制,toString方法可将十进制数字转换为其他进制。 示例说明1:将十六进制数字转换为十进制 let hex = "3A"; let dec = parseInt(hex, 16); consol…

    JavaScript 2023年5月28日
    00
  • javascript+css实现进度条效果

    下面是实现进度条效果的攻略: 1.基本原理 进度条通常是在页面的顶部或底部显示的,用来展示某个任务的完成进度。实现进度条的基本原理是,通过JavaScript控制元素的宽度达到动画效果。然后结合CSS使进度条更美观。 2. 实现步骤 2.1 HTML结构 首先需要在HTML中添加进度条的结构,通常情况下进度条是一个<div>元素,同时为了更好地控…

    JavaScript 2023年6月10日
    00
  • JavaScript操作Cookie详解

    当我们开发Web应用程序时,经常会使用cookie来存储和维护用户的数据,在JavaScript中,对cookie的操作可以使用document.cookie属性来完成。本篇攻略将详细介绍JavaScript中对cookie的操作。 创建与修改Cookie JavaScript中创建和修改cookie的方法都是通过设置document.cookie属性实现。…

    JavaScript 2023年6月11日
    00
  • 挑战“三大框架”的解决方案

    最近这些年,随着三大框架React、Vue、Angular版本逐渐稳定,前端技术栈的迭代似乎缓慢下来。 如果我们把目光拉伸到未来十年的视角,前端行业会出现哪些框架有可能会挑战React、Vue、Angular呢? 崭露头角的 Svelte 应该是其中的选项之一。 简介 Svelte 是一个构建 web 应用程序的工具。它被预测为未来十年可能取代React和V…

    JavaScript 2023年5月9日
    00
  • js中判断变量类型函数typeof的用法总结

    标题:JS中判断变量类型函数typeof的用法总结 1. typeof函数的介绍 typeof是JavaScript中的一个关键字,用于判断一个变量的类型。它返回一个字符串,表示变量的数据类型。需要注意的是,typeof运算符不是函数,括号可以省略。 普通变量的类型判断: let a = 1; console.log(typeof a); // number…

    JavaScript 2023年5月27日
    00
  • JS回调函数深入理解

    关于“JS回调函数深入理解”的完整攻略,我将分为以下几个部分进行讲解: 一、回调函数的基本概念与用法 回调函数是指在某些特定的执行时刻,系统自动调用用户指定的函数进行处理的一种技术。在JavaScript中,回调函数经常被用来处理异步操作或者事件响应。 在基本使用上,回调函数常常以匿名函数的形式出现,比如下面的这个例子: //在稳定排序中,通过回调函数定义排…

    JavaScript 2023年5月27日
    00
  • JavaScript事件委托

    JavaScript 事件委托是一种常用的编程技巧,它可以避免为每个元素添加事件监听器。事件委托背后的思想是,将事件监听器添加到其父元素上,而不是为每个子元素添加监听器。当事件触发时,事件将从子元素冒泡到其父元素,由父元素的事件监听器处理。这种技巧可以减少代码量,提高性能。 以下是一个完整的 JavaScript 事件委托攻略: 1. 理解事件冒泡和捕获 事…

    Web开发基础 2023年3月30日
    00
合作推广
合作推广
分享本页
返回顶部