vue添加锚点,实现滚动页面时锚点添加相应的class操作


Posted in Javascript onAugust 10, 2020

第一步,给vue页面添加锚点

.orange{
  color: #f97910;
}
<template>
  <div class="productDetail" ref="content">
    <div class="tabbar">        
      <div @click.prevent="tabclick(index)" v-for="(item,index) in productTile" :key="index" :class="{orange:index==current}">{{item}}</div>    
    </div>
    <div id="0">...</div>
    <div id="1">...</div>
    <div id="2">...</div>
  </div>
<template>
tabclick(index){
  this.current=index;
  let anchorElement = document.getElementById(index);
  if(anchorElement) { anchorElement.scrollIntoView(); } 
},

第二步:给class为productDetail的<div>部分加height:100%;overflow-y: scroll;

.productDetail { 
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  overflow-y: scroll;
}

第三步,添加监听事件

document.getElementsByClassName('productDetail')[0]; vue中同理于:this.$refs.content

methods:{
  handleScroll(el) {
    this.scrollTop = this.$refs.content.scrollTop;
    if (this.scrollTop >= 460) {
      this.current = 2
    } else if (this.scrollTop < 460 && this.scrollTop >= 360) {
      this.current = 1
    } else {
      this.current = 0
    }
   },
},
mounted() {
  //scoll滚动事件监听
  var pro_detail_page = document.getElementsByClassName('productDetail')[0];
  pro_detail_page.addEventListener('scroll', this.handleScroll);
},

注:给最外层div添加height:100%后,mint-ui的轮播图就会展示不出来。我们可以修改mint-ui的默认overflow属性,改为:overflow:visible

补充知识:使用Vuepress自动生成markdown的目录时,一旦标题有数字时便无法跳转的问题解决

问题描述

最近在用vuepress写网页文档的时候发现了一个问题,就是我用markdown书写的标题中如果有类似 1.2 XXX 的标题时,当使用官方文档给出的:

[[toc]]

自动生成目录时,最终生成的网页,含有数字的标题是无法跳转到相应位置的。

问题分析

查看官方开发文档后发现,这跟vuepress的默认配置有关,从如图1所示markdown.slugify函数可以看到,我们需要修改其配置。

markdown.slugify函数

vue添加锚点,实现滚动页面时锚点添加相应的class操作

图1 markdown.slugify函数

点击图中的source,跳转到GitHub的工程页面,可以看到如下的代码段:

// string.js slugify drops non ascii chars so we have to
// use a custom implementation here
// @ts-ignore
import { remove as removeDiacritics } from 'diacritics'
 
// eslint-disable-next-line no-control-regex
const rControl = /[\u0000-\u001f]/g
const rSpecial = /[\s~`!@#$%^&*()\-_+=[\]{}|\\;:"'<>,.?/]+/g
 
export = function slugify (str: string): string {
 return removeDiacritics(str)
 // Remove control characters
  .replace(rControl, '')
  // Replace special characters
  .replace(rSpecial, '-')
  // Remove continous separators
  .replace(/\-{2,}/g, '-')
  // Remove prefixing and trailing separtors
  .replace(/^\-+|\-+$/g, '')
  // ensure it doesn't start with a number (#121)
  .replace(/^(\d)/, '_$1')
  // lowercase
  .toLowerCase()
}

看到了其中有一句ensure it doesn't start with a number (#121),可以知道这就是问题所在:

// ensure it doesn't start with a number (#121)

.replace(/^(\d)/, '_$1')

我们的标题数字被这句代码替换掉了,导致最终的链接根本没有指向标题,故无法跳转。

问题解决

根据GitHub页面上的配置路径,找到自己安装的vuepress模块的配置路径,我的路径是:

D:\my_program\nodejs\node_global\node_modules\vuepress\node_modules\@vuepress\shared-utils\lib\slugify.js

打开 slugify.js 文件,并将上述的代码段注释掉,问题即可解决。

以上这篇vue添加锚点,实现滚动页面时锚点添加相应的class操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery ui css framework
Jun 28 Javascript
jquery 插件开发备注
Aug 27 Javascript
javascript firefox 自动加载iframe 自动调整高宽示例
Aug 27 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
AngularJS学习第二篇 AngularJS依赖注入
Feb 13 Javascript
vue2.0中goods选购栏滚动算法的实现代码
May 17 Javascript
Javascript网页抢红包外挂实现分享
Jan 11 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
Jan 11 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
详解vue 组件注册
Nov 20 Vue.js
解决vue项目本地启动时无法携带cookie的问题
Feb 06 Vue.js
vue 实现锚点功能操作
Aug 10 #Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 #Javascript
Vue-cli 移动端布局和动画使用详解
Aug 10 #Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
Aug 10 #Javascript
在vue-cli创建的项目中使用sass操作
Aug 10 #Javascript
浅谈实现在线预览PDF的几种解决办法
Aug 10 #Javascript
如何利用JavaScript编写更好的条件语句详解
Aug 10 #Javascript
You might like
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
Ajax+Jpgraph实现的动态折线图功能示例
2019/02/11 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
javascript window.opener的用法分析
2010/04/07 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
js实现鼠标点击文本框自动选中内容的方法
2015/08/20 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
AngularJs自定义服务之实现签名和加密
2016/08/02 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
js常用DOM方法详解
2017/02/04 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
详解Vue.js使用Swiper.js在iOS
2018/09/10 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
vue中tab选项卡的实现思路
2018/11/25 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
Windows下PyCharm安装图文教程
2018/08/27 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python实现二维插值的三维显示
2018/12/17 Python
Python multiprocessing多进程原理与应用示例
2019/02/28 Python
解决pyqt5中QToolButton无法使用的问题
2019/06/21 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
巴西本土电商平台:Americanas
2020/06/21 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
模具专业推荐信
2013/10/30 职场文书
护理工作感言
2014/01/16 职场文书
捐书倡议书
2014/08/29 职场文书
法学专业求职信范文
2015/03/19 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书