iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Vue如何实现顶部tags浏览历史
  • 327
分享到

Vue如何实现顶部tags浏览历史

2023-06-22 05:06:02 327人浏览 泡泡鱼
摘要

这篇文章主要为大家展示了“Vue如何实现顶部tags浏览历史”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现顶部tags浏览历史”这篇文章吧。废话demo预览实现的功能默认有首页,不

这篇文章主要为大家展示了“Vue如何实现顶部tags浏览历史”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现顶部tags浏览历史”这篇文章吧。

废话

demo预览

Vue如何实现顶部tags浏览历史

Vue如何实现顶部tags浏览历史

实现的功能

默认有首页,不能关闭

点击路由菜单,判断有无存在,没有就添加,有就定位到上面

点击跳转,点击X可关闭

关闭当前页,自动跳到下一个tag页面

如果当前页在最后一个,默认跳到上一个tag页面

右键菜单,刷新,关闭右侧,关闭所有

动态判断tags长多,放不下时,出现左右两侧按钮,减少时自动消失

动态判断窗口放大缩小,自动判断有无左右两侧按钮

正文

不用任何vuex,乱七八糟的方法,全在一个文件,粘贴即用

Vue如何实现顶部tags浏览历史

放到你想要的位置即可(此demo,放在了面包屑上面)

先安装 (监听某dom元素大小的包)

npm install element-resize-detector

tags.vue

<template>  <div>    <div class="tags">      <!-- 左箭头 -->      <div        class="arrow arrow_left"        v-show="arrowVisible"        @click="handleClickToLeft"      >        <i class="el-icon-arrow-left"></i>      </div>      <!-- 标签内容 -->      <div class="tags_content" ref="box">        <span ref="tags">          <el-tag            v-for="(tag, index) in tags"            :key="tag.name"            :class="[active == index ? 'active top_tags' : 'top_tags']"            effect="dark"            :closable="tag.name != 'Firstpage1'"            @close="handleClose(index, tag)"            @click="clickTag(index, tag)"            @contextmenu.native.prevent="handleClickContextMenu(index, tag)"          >            {{ $t("router." + tag.name) }}          </el-tag>        </span>      </div>      <!-- 右箭头 -->      <div        class="arrow arrow_right"        v-show="arrowVisible"        @click="handleClickToRight"      >        <i class="el-icon-arrow-right"></i>      </div>    </div>    <!-- 右键菜单 -->    <ul      v-show="contextMenu.isshow"      :      class="el-dropdown-menu el-popper"      x-placement="bottom-end"    >      <li        v-if="this.active == this.contextMenu.index"        class="el-dropdown-menu__item"        @click="refresh"      >        刷新      </li>      <li class="el-dropdown-menu__item" @click="closeRightTag">        关闭右侧      </li>      <li class="el-dropdown-menu__item" @click="closeOtherTag">        关闭其它      </li>      <div x-arrow="" class="popper__arrow" ></div>    </ul>  </div></template><script>import elementResizeDetectORMaker from "element-resize-detector";export default {  data() {    return {      // 是否有箭头      arrowVisible: true,      // 点击次数      num: 0,      active: 0,      tags: [],      // 右键的元素      contextMenu: {        index: 0,        tag: {},        menuLeft: 0,        isShow: false      }    };  },  watch: {    $route() {      this.getThisPage();    },    tags() {      this.listenFun(this.$refs.tags, "tags");    }  },  mounted() {    this.listenFun(this.$refs.box, "box");    var that = this;    document.addEventListener("click", function(e) {      that.contextMenu.isShow = false;    });  },  methods: {    // 监听可视区域宽,浏览器窗口大小改变执行    listenFun(monitor, dom) {      let boxWidth = this.$refs.box.offsetWidth,        tagsWidth = this.$refs.tags.offsetWidth,        erd = elementResizeDetectorMaker();      erd.listenTo(monitor, ele => {        this.$nextTick(() => {          if (            (dom == "box" && ele.offsetWidth >= tagsWidth) ||            (dom == "tags" && ele.offsetWidth <= boxWidth)          ) {            this.arrowVisible = false;            this.$refs.box.style.paddingLeft = "16px";            this.$refs.box.style.paddingRight = "16px";            this.$refs.box.style.transform = "TranslateX(0px)";            this.num = 0;          } else {            this.arrowVisible = true;            this.$refs.box.style.paddingLeft = "56px";            this.$refs.box.style.paddingRight = "56px";          }        });      });    },    // 判断当前页    getThisPage() {      let currentPgae = this.$route;      // 判断tags里是否有当前页面      var index = this.tags.findIndex(tag => tag.name == currentPgae.name);      if (index == -1) {        this.tags.push({          name: currentPgae.name,          path: currentPgae.path        });      }      // 当前选择页      this.active = this.tags.findIndex(tag => tag.name == currentPgae.name);    },    // 关闭标签    handleClose(index, tag) {      this.tags.splice(this.tags.indexOf(tag), 1);      if (index == this.tags.length) {        this.active = index - 1;        this.$router.push(this.tags[index - 1].path);      } else {        this.$router.push(this.tags[index].path);      }    },    // 点击标签    clickTag(index, tag) {      this.active = index;      this.$router.push(tag.path);    },    // 左侧按钮    handleClickToLeft() {      if (this.num > 0) {        this.num--;        this.$refs.box.style.transform = `TranslateX(-${this.num * 200}px)`;      }    },    // 右侧按钮    handleClickToRight() {      // 最后一个标签右测距离浏览器左侧距离      let lastChild = document        .querySelectorAll(".top_tags")        [this.tags.length - 1].getBoundinGClientRect().right;      // 可视窗口的宽      let bodyWidth = document.body.offsetWidth;      // 右侧箭头48+右侧边距16      if (bodyWidth - lastChild <= 64) {        this.num++;        this.$refs.box.style.transform = `TranslateX(-${this.num * 200}px)`;      }    },    // 右键    handleClickContextMenu(index, tag) {      this.contextMenu.isShow = true;      this.contextMenu.index = index;      this.contextMenu.tag = tag;      let isTag = document        .querySelectorAll(".top_tags")        [index].getBoundingClientRect();      this.contextMenu.menuLeft = isTag.left - 48 + isTag.width / 2 + "px";    },    // 刷新    refresh() {      this.$router.Go(0);    },    // 关闭其他    closeOtherTag() {      let tagsLin = this.tags.length,        { index, tag, menuLeft } = this.contextMenu;      if (index != 0) {        this.tags = [          {            name: "Firstpage1",            path: "/First/page1"          },          {            name: tag.name,            path: tag.path          }        ];      } else {        this.tags = [          {            name: "Firstpage1",            path: "/First/page1"          }        ];      }      this.active = index;      this.$router.push(tag.path);    },    // 关闭右侧    closeRightTag() {      let tagsLin = this.tags.length,        { index, tag, menuLeft } = this.contextMenu;      this.tags.splice(index + 1, tagsLin - index);      this.active = index;      this.$router.push(tag.path);    }  },  created() {    // 监听页面刷新    window.addEventListener("beforeunload", e => {      localStorage.setItem(        "tagInfo",        JSON.stringify({          active: this.active,          tags: this.tags        })      );    });    let tagInfo = localStorage.getItem("tagInfo")      ? jsON.parse(localStorage.getItem("tagInfo"))      : {          active: 0,          tags: [            {              name: "Firstpage1",              path: "/First/page1"            }          ]        };    this.active = tagInfo.active;    this.tags = tagInfo.tags;  }};</script><style lang="less" scoped>/deep/.el-tag--dark {  border-color: transparent;}/deep/.el-tag--dark .el-tag__close {  color: #86909c;  font-size: 16px;}/deep/.el-tag--dark .el-tag__close:hover {  background: #e7eaf0;}.tags {  position: relative;  overflow: hidden;  .arrow {    width: 48px;    text-align: center;    cursor: pointer;    background: #fff;    position: absolute;    z-index: 1;    &_left {      left: 0;      top: 0;    }    &_right {      right: 0;      top: 0;    }  }  &_content {    transition: 0.3s;    white-space: nowrap;    // padding: 0 16px;  }  .top_tags {    margin-right: 8px;    cursor: pointer;    background: #fff;    font-size: 12px;    font-weight: 400;    color: #1d2129;  }  .top_tags:hover,  .active,  .arrow:hover {    background: #e7eaf0;  }}</style>

重点

需要修改的地方

Vue如何实现顶部tags浏览历史

currentPgae.name 是路由结构的name,判断有无存在,没有就添加,有就定位到上面,根据项目修改

Vue如何实现顶部tags浏览历史

监听刷新时,去本地存储 tags 和 当前页面的active,Ftistpage1 改成自己的首页即可 

以上是“Vue如何实现顶部tags浏览历史”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Vue如何实现顶部tags浏览历史

本文链接: https://www.lsjlt.com/news/302620.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue如何实现顶部tags浏览历史
    这篇文章主要为大家展示了“Vue如何实现顶部tags浏览历史”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现顶部tags浏览历史”这篇文章吧。废话demo预览实现的功能默认有首页,不...
    99+
    2023-06-22
  • Vue顶部tags浏览历史的实现
    目录废话实现的功能正文重点废话 demo预览 实现的功能 默认有首页,不能关闭 点击路由菜单,判断有无存在,没有就添加,有就定位到上面 点击跳转,点击X可关闭 关闭当前页,自动跳...
    99+
    2024-04-02
  • vue怎么实现管理系统顶部tags浏览历史
    本文小编为大家详细介绍“vue怎么实现管理系统顶部tags浏览历史”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么实现管理系统顶部tags浏览历史”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
  • vue如何清除浏览器历史栈
    目录如何清除浏览器历史栈问题vue返回首页后如何清空路由需求一:从首页点击路由到A页面需求二:把浏览器的记录返回指定的页面如何清除浏览器历史栈 问题 需要跳转好几个页面进行表单提交,...
    99+
    2024-04-02
  • windows edge浏览器历史记录如何恢复
    这篇文章主要介绍了windows edge浏览器历史记录如何恢复的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇windows edge浏览器历史记录如何恢复文章都会有所收获,下面我们一起来看看吧。edge浏览器...
    99+
    2023-07-01
  • jQuery如何监听浏览器历史记录事件?
    这篇文章将为大家详细讲解有关jQuery如何监听浏览器历史记录事件?,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。jQuery监听浏览器历史记录事件 jQuery提供了一个强大的API,可以用来监听浏览器...
    99+
    2024-04-02
  • 如何进行管理浏览历史的Chrome扩展History 2
    这篇文章给大家介绍如何进行管理浏览历史的Chrome扩展History 2,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Chrome的历史记录会按照日期把你所有看过的网页都列出来,尽管你可以通过搜索来查找,但看着还是闹...
    99+
    2023-06-16
  • vue+elemen如何t实现页面顶部tag
    这篇文章给大家分享的是有关vue+elemen如何t实现页面顶部tag的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这种tag如何写?思路总结下:1. 页面渲染1页面显示由数组循环得出,数组可存储在store里(...
    99+
    2023-06-22
  • Vue中如何用Vant实现顶部搜索栏
    这篇文章主要介绍了Vue中如何用Vant实现顶部搜索栏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue中如何用Vant实现顶部搜索栏文章都会有所收获,下面我们一起来看看吧。搜索栏组件源码(SearchBar...
    99+
    2023-07-04
  • vue如何实现浏览器桌面通知
    本篇内容主要讲解“vue如何实现浏览器桌面通知”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue如何实现浏览器桌面通知”吧!浏览器桌面通知:当浏览器最小化,或者切换到其他标签页不在当前系统页面...
    99+
    2023-07-04
  • react如何实现返回顶部
    这篇文章主要介绍了react如何实现返回顶部的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇react如何实现返回顶部文章都会有所收获,下面我们一起来看看吧。react实现返回顶部的方法:1、创建一个函数式组件“...
    99+
    2023-07-04
  • Vue如何实现日历
    这篇文章主要介绍了Vue如何实现日历,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。组件(component)是Vue最强大的功能之一。组件可...
    99+
    2024-04-02
  • Android如何实现顶部搜索框
    这篇文章给大家分享的是有关Android如何实现顶部搜索框的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。本文介绍两种SearchView的使用情况,一种是输入框和搜索结果不在一个activity中,另一种是在一个...
    99+
    2023-05-30
    android
  • php如何实现浏览记录
    本篇内容介绍了“php如何实现浏览记录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php实现浏览记录的方法:1、设置初始数据;2、获取co...
    99+
    2023-06-25
  • Vue如何实现table表格置顶
    目录如何实现table表格置顶置顶前置顶后点击table表格某一行让其置顶如何实现table表格置顶 老大让做vue项目,可是我对vue还不熟,抓紧时间学习,记录 此处省略css &...
    99+
    2024-04-02
  • CSS如何实现返回顶部功能
    这篇文章主要介绍CSS如何实现返回顶部功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!现在的网站基本上都是长页面,多的有四五屏,少的话也有两三屏,页面太长有的时候为了提升用户体验,会在页面右边出现一个回到顶部的按钮...
    99+
    2023-06-08
  • jQuery如何实现返回顶部按钮
    小编给大家分享一下jQuery如何实现返回顶部按钮,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!返回顶部按钮你可以利用 anim...
    99+
    2024-04-02
  • js如何实现返回顶部效果
    这篇文章主要为大家展示了“js如何实现返回顶部效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何实现返回顶部效果”这篇文章吧。代码如下:<!DOC...
    99+
    2024-04-02
  • php如何实现统计浏览量
    今天小编给大家分享一下php如何实现统计浏览量的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、利用cookies统计浏览量...
    99+
    2023-07-05
  • python如何实现浏览器伪装
    小编给大家分享一下python如何实现浏览器伪装,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!浏览器伪装因为网站服务器能够很轻易...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作