Vue3+Typescript+setup / Vue2使用scrollIntoView()实现锚点跳转指定列表

在标签上添加ref属性来引用DOM元素,

Vue2中使用$refs来获取该DOM元素并调用scrollIntoView()方法。

使用ref="yearDiv"在每个年份的div元素上添加了一个引用。然后,在yearClick方法中,我们通过this.$refs.yearDiv[year]来获取对应年份的div元素,并调用scrollIntoView()方法来将该元素滚动到可见区域。方法如下:

yearClick(year) {

this.typeStyle = year;

const yearDiv = this.$refs.yearDiv[year];

yearDiv.scrollIntoView({ behavior: 'smooth' });

},

Vue3和Typescript实现锚点跳转的示例代码:

需要在Vue组件中更新HTML模板中添加data-year属性,该属性的值是对应的年份,使用document.querySelector函数来获取带有相应data-year属性值的div元素,并将其滚动到可见区域。

:data-year="year"

ref="yearDivs 

:class="{ rightActive: typeStyle === year }" //悬浮高亮

  <div class="year-time">
          <ul class="yearList" ref="yearList">
            <li v-for="year in years" :key="year" :class="{ active: typeStyle === year }" @mouseover="yearClick(year)"
             >
              {{ year }}
            </li>
          </ul>
          <ul class="right-content">
            <div v-for="year in years" :key="year" :class="{ rightActive: typeStyle === year }" :data-year="year" ref="yearDiv">
              <li v-for="item in contents[year]">{{ item }}</li>
            </div>
          </ul>
        </div>

// 年份列表
const years = ['2019', '2020', '2021', '2022', '2023']
// 每个年份对应的内容
const contents: Record<string, string[]> = {
  '2019': ['06月 一 ....'],
  '2020': ['03月 一 AI......'],
  '2021': ['03月 一 深入........'],
  '2022': ['06月 一 建设布..........'],
  '2023': ['05月 一 上线....','08月 一 启动安全....','09月 一 推出....']
}

const typeStyle = ref('2019')
const yearClick = (year: string) => {
  typeStyle.value = year;
  const yearDiv = document.querySelector(`[data-year="${year}"]`) as HTMLElement;
  yearDiv?.scrollIntoView({ behavior: 'smooth' });
  console.log(yearDiv, 'yearDiv');

};

css样式

    .year-time {
        display: flex;
        padding-top: 30px;
        padding-left: 80px;
        justify-content: space-between;

        ul {
          list-style-type: none;
          margin: 0;
          padding: 0;
        }

        .yearList {
          width: 100px;

          li {
            width: 60px;
            height: 60px;
            line-height: 60px;
            text-align: center;
            font-size: 16px;
            font-weight: bold;
            border-radius: 50%;
            cursor: pointer;
            transition: all 0.3s;
          }
        }

        .right-content {
          width: calc(100% - 100px);
          height: 400px;
          overflow: auto;
          padding-left: 80px;
          padding-right: 20px;
          scrollbar-width: thin;
          scrollbar-color: #bbb transparent;
          font-size: 14px;
        }

        .right-content::-webkit-scrollbar {
          width: 6px;
        }

        .right-content::-webkit-scrollbar-track {
          background-color: transparent;
        }

        .right-content::-webkit-scrollbar-thumb {
          background-color: #bbb;
          border-radius: 3px;
        }

       

        .right-content li {
          margin-bottom: 20px;
        }
        .active {
          background-color: #007aff;
          color: #fff;
        }

        .rightActive {
          font-weight: 700;
          font-size: 16px;
          color: #4391f1;
        }

      }

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3 + TypeScript 是一种常用的前端开发技术组合,它结合了Vue框架的便捷性和TypeScript的类型检查能力,可以提高项目的可维护性和开发效率。下面是一些Vue3 + TypeScript项目经验的介绍: 1. 项目初始化:使用Vue CLI创建一个Vue3项目,并选择TypeScript作为项目的语言。这样可以自动生成一些基本的配置和文件结构,方便快速开始开发。 2. 类型定义:在Vue3 + TypeScript项目中,可以使用TypeScript的类型系统来定义组件的props、data、computed等属性的类型,以及事件的参数类型等。这样可以在编码过程中及早发现潜在的类型错误,提高代码的健壮性。 3. 组件开发:在Vue3 + TypeScript项目中,可以使用装饰器(decorators)来定义组件选项,例如使用@Prop来定义props属性的类型,使用@Emit来定义事件的参数类型。这样可以更清晰地描述组件的接口和行为。 4. 路由管理:在Vue3 + TypeScript项目中,可以使用Vue Router进行路由管理。通过定义路由的类型和参数类型,可以在编码过程中获得更好的类型提示和错误检查。 5. 状态管理:在Vue3 + TypeScript项目中,可以使用Vuex进行状态管理。通过定义状态的类型和操作的参数类型,可以提高代码的可读性和可维护性。 6. 第三方库的使用:在Vue3 + TypeScript项目中,可以使用第三方库,并为其编写类型声明文件,以获得更好的类型检查和代码提示。例如,可以使用axios发送HTTP请求,并为其编写类型声明文件,以确保请求参数和响应数据的类型正确。 7. 单元测试:在Vue3 + TypeScript项目中,可以使用Jest等测试框架进行单元测试。通过编写类型安全的测试用例,可以提高代码的质量和可靠性。 8. 构建和部署:在Vue3 + TypeScript项目中,可以使用Webpack等构建工具进行项目的打包和优化。通过配置合适的TypeScript编译选项和Webpack插件,可以生成高效的生产环境代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值