Jinuss's blog Jinuss's blog
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《Vue》
    • 《React》
    • 《Git》
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • 学习
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

东流

前端可视化
首页
  • 前端文章

    • JavaScript
  • 学习笔记

    • 《JavaScript高级程序设计》
    • 《Vue》
    • 《React》
    • 《Git》
    • JS设计模式总结
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • 学习
  • 实用技巧
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • HTML

    • 常用meta整理
    • Particles.js粒子效果库
    • Vanta.js3D背景库
    • lorem 乱数假文
    • 图片裁剪插件cropper.js
    • scrollIntoView 用法
      • 视图过渡动画
      • canvas自定义实现粒子动画
      • 一张图理解浏览器的位置和尺寸
      • HTML5 全屏讲解
      • 获取元素的宽高
      • 零宽字符
    • CSS

    • 浏览器

    • 页面
    • HTML
    东流
    2024-05-22
    目录

    scrollIntoView 用法

    # 概述

    scrollIntoView 方法用于滚动指定元素的父容器或者当前窗口,使指定的元素对用户可见。

    # 语法

    element.scrollIntoView(options):其中 options 参数可选,默认值为{block: "start", inline: "nearest"};还有另外两种情况

    • 如果options是布尔值:true表示滚动到元素的顶部,相当于{block: "start", inline: "nearest"},false表示滚动到元素的底部,即为{block: "end", inline: "nearest"}。

    • 如果options是对象,则其包含下列属性

      • block: 定义垂直方向的对齐方式,可选值为start、center、end或者nearest,默认值为start
      • inline: 定义水平方向的对齐方式,可选值为start、center、end或者nearest,默认值为nearest
      • behavior: 定义滚动行为,可选值为auto或者smooth、instant,默认值为auto

    # 应用场景

    Element plus 的表单属性scroll-to-error设置为true后,当校验失败时,滚动到第一个错误表单项,其原理就是应用了这个 API。

    配置如下:

    其部分源码如下:

    //表单字段校验方法
    const validateField = async (modelProps = [], callback) => {
      const shouldThrow = !isFunction$1(callback);
      try {
        const result = await doValidateField(modelProps);
        if (result === true) {
          callback == null ? void 0 : callback(result);
        }
        return result;
      } catch (e) {
        if (e instanceof Error) throw e;
        const invalidFields = e;
        if (props.scrollToError) {
          // 表单配置项 scrollToError若为true,则执行滚动逻辑
          scrollToField(Object.keys(invalidFields)[0]);
        }
        callback == null ? void 0 : callback(false, invalidFields);
        return shouldThrow && Promise.reject(invalidFields);
      }
    };
    const scrollToField = (prop) => {
      var _a;
      const field = filterFields(fields, prop)[0];
      if (field) {
        (_a = field.$el) == null
          ? void 0
          : _a.scrollIntoView(props.scrollIntoViewOptions);
      }
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    编辑 (opens new window)
    上次更新: 2024/08/22, 05:33:44
    图片裁剪插件cropper.js
    视图过渡动画

    ← 图片裁剪插件cropper.js 视图过渡动画→

    最近更新
    01
    GeoJSON
    05-08
    02
    Circle
    04-15
    03
    CircleMarker
    04-15
    更多文章>
    Theme by Vdoing | Copyright © 2024-2025 东流 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式