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 相关文章推荐
JS的replace方法介绍
Oct 20 Javascript
js登录弹出层特效
Mar 07 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
Aug 12 Javascript
jQuery获得字体颜色16位码的方法
Feb 20 Javascript
Extjs 点击复选框在表格中增加相关信息行
Jul 12 Javascript
jquery在vue脚手架中的使用方式示例
Aug 29 jQuery
原生javascript实现文件异步上传的实例讲解
Oct 26 Javascript
js canvas实现5张图片合成一张图片
Jul 15 Javascript
vue导航栏部分的动态渲染实例
Nov 01 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
Mar 23 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 Javascript
jQuery实现容器间的元素拖拽功能
Dec 01 jQuery
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带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Python实现的概率分布运算操作示例
2017/08/14 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
Python字典推导式将cookie字符串转化为字典解析
2019/08/10 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
appium+python自动化配置(adk、jdk、node.js)
2020/11/17 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
见习期自我鉴定
2013/11/07 职场文书
经销商订货会主持词
2014/03/27 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
计算机实训心得体会
2016/01/14 职场文书
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang