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程序 入门者学习
Jul 09 Javascript
javascript一元操作符(递增、递减)使用示例
Aug 07 Javascript
js清理Word格式示例代码
Feb 13 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
Apr 30 Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
Jun 06 Javascript
jQuery中:not选择器用法实例
Dec 30 Javascript
Jquery ajax基础教程
Nov 20 Javascript
js实现导航栏中英文切换效果
Jan 16 Javascript
Javascript实现信息滚动效果
May 18 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
May 20 Javascript
vue中如何添加百度统计代码
Dec 19 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
改进的IP计数器
2006/10/09 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
FastCGI 进程意外退出造成500错误
2015/07/26 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
双冒号 ::在PHP中的使用情况
2015/11/05 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
PHP MSSQL 分页实例
2016/04/13 PHP
php上传大文件设置方法
2016/04/14 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
使用AngularJS实现表单向导的方法
2015/06/19 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
微信小程序开发探究
2016/12/27 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
vue下拉列表功能实例代码
2018/04/08 Javascript
angularJs中ng-model-options设置数据同步的方法
2018/09/30 Javascript
用vue写一个日历
2020/11/02 Javascript
Python高效编程技巧
2013/01/07 Python
python为tornado添加recaptcha验证码功能
2014/02/26 Python
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
护士自荐信范文
2013/12/15 职场文书
体育专业个人求职信范文
2013/12/27 职场文书
经典禁毒标语
2014/06/16 职场文书
销售人员求职信
2014/07/22 职场文书
基层党组织整改方案
2014/10/25 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL
go goth封装第三方认证库示例详解
2022/08/14 Golang