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 相关文章推荐
javascript 定义新对象方法
Feb 20 Javascript
删除select中所有option选项jquery代码
Aug 12 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
Nov 25 Javascript
jquery 构造函数在表单提交过程中修改数据
May 25 Javascript
AngularJS 日期格式化详解
Dec 23 Javascript
JavaScript的==运算详解
Jul 20 Javascript
关于vue.js v-bind 的一些理解和思考
Jun 06 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 Javascript
详解require.js配置路径的用法和css的引入
Sep 06 Javascript
vue地址栏直接输入路由无效问题的解决
Nov 15 Javascript
Vue 使用formData方式向后台发送数据的实现
Apr 14 Javascript
VUE 动态组件的应用案例分析
Dec 02 Javascript
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中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
php生成验证码函数
2015/10/20 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
python函数返回多个值的示例方法
2013/12/04 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python设计模式之享元模式原理与用法实例分析
2019/01/11 Python
numpy数组广播的机制
2019/07/12 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
详解Python中的Lock和Rlock
2021/01/26 Python
Python 求向量的余弦值操作
2021/03/04 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
实习求职信
2013/12/01 职场文书
高中化学教学反思
2014/01/13 职场文书
校园之星获奖感言
2014/01/29 职场文书
英语复习计划
2015/01/19 职场文书
公司会议开幕词
2016/03/03 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
pandas求平均数和中位数的方法实例
2021/08/04 Python