首页 > 其他分享 >需求:添加item后自动滚动到容器底部(如果有滚动条)

需求:添加item后自动滚动到容器底部(如果有滚动条)

时间:2024-06-20 11:21:54浏览次数:23  
标签:box 容器 console clientHeight 滚动条 item let scrollTop scrollHeight

大巧不工,用了原生js

<template>
  <div class="app-container">
    <div class="box">
      <div v-for="(item, index) in count" :key="index" class="item">
        {{ item }}
      </div>
    </div>
    <t-button @click="add">点击</t-button>
  </div>
</template>

<script>
export default {
  name: 'Test',
  data() {
    return {
      count: 5
    }
  },
  mounted() {
    this.handlerNodeScroll()
  },
  methods: {
    add() {
      this.count += 1
      // 监听滚动
      let box = document.querySelector('.box')
      this.$nextTick(() => {
        // 如果有滚动条,则滚动到底部
        if (box.clientHeight < box.scrollHeight) {
          box.scrollTop = box.scrollHeight
        }
        // box.scrollTop = box.scrollHeight
        console.log('this.hasVerticalScrollbar(.box) :>> ', this.hasVerticalScrollbar(box))
      })
    },
    hasVerticalScrollbar(element) {
      // 判断容器是否有垂直滚动条
      return element.scrollHeight > element.clientHeight
    },
    // 监听元素滚动
    handlerNodeScroll() {
      let that = this
      console.log('1111 :>> ', 1111)
      // 函数防抖
      let fun = that.debounce((e) => {
        // 距顶部
        let scrollTop = e.target.scrollTop
        // 可视区高度
        let clientHeight = e.target.clientHeight
        // 滚动条总高度
        let scrollHeight = e.target.scrollHeight
        // 如果当前距离顶部的值加上可视区域的值大于等于总高度,则任务滚动条触底
        console.log(
          'Math.ceil(scrollTop + clientHeight) >= scrollHeight :>> ',
          Math.ceil(scrollTop + clientHeight) >= scrollHeight
        )
        console.log('Math.ceil(scrollTop + clientHeight) :>> ', Math.ceil(scrollTop + clientHeight))
        console.log('scrollHeight :>> ', scrollHeight)
        if (Math.ceil(scrollTop + clientHeight) >= scrollHeight - 1) {
          //容差:20px
          console.log('滚动到底部')
          // if (that.count >= 50) return
          // that.count += 10
        } else {
          console.log('222 :>> ', 222)
        }
      }, 100)

      // 监听滚动
      let box = document.querySelector('.box')
      box.scrollTop = box.scrollHeight
      // box.addEventListener('scroll', function (e) {
      //   fun(e)
      // })
    },
    // 函数防抖
    debounce(handle, delay) {
      let timer = null
      return function () {
        let _self = this,
          _args = arguments
        clearTimeout(timer)
        timer = setTimeout(function () {
          handle.apply(_self, _args)
        }, delay)
      }
    }
  }
}
</script>

<style scoped lang="less">
.box {
  width: 200px;
  max-height: 400px;
  border: 1px solid #7c7c7c;
  padding: 15px;
  box-sizing: border-box;
  overflow: auto;

  .item {
    margin-bottom: 10px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    background-color: #1482f0;
    font-size: 18px;
    font-weight: 700;
    color: white;
  }
}
</style>

标签:box,容器,console,clientHeight,滚动条,item,let,scrollTop,scrollHeight
From: https://www.cnblogs.com/hjk1124/p/18258310

相关文章

  • 京东商品详情API接口,jd/item_get(属性规格Sku详情图等)
    京东商品详情API接口是京东开放平台提供的一项重要服务,API接口接入(taobao2024api)它允许第三方开发者通过调用API接口,获取京东平台上商品的详细信息。以下是关于京东商品详情API接口的清晰介绍:1.接口概述功能:用于获取京东商品的详细信息,如商品标题、价格、促销信息、图片、规......
  • Spring Environment 容器环境变量注入Spring属性不一致却能生效
    https://blog.csdn.net/fenglllle/article/details/126942480 前言最近使用容器部署应用,Spring应用,会注入一些环境变量,然而这些环境变量的大小写和真实的取值差异很大,而且也不是xxx.xxx,而是xxx_xxx,非常奇怪,代码里也没发现原因。通过分析Spring源码发现,原理就是Spring的特殊处理......
  • 以沙箱的方式运行容器:安全容器gvisor
    目录一.系统环境二.前言三.安全容器隔离技术简介四.Gvisor简介五.容器runtime简介六.docker容器缺陷七.配置docker使用gVisor作为runtime7.1安装docker7.2升级系统内核7.3安装gvisor7.4配置docker默认的runtime为gVisor7.5docker使用gVisor作为runtime创建容器八.配置contain......
  • golang json库 忽略 omitempty
    json库的obmitempty介绍众所周知,golang的json库有个omitempty的tag,有了它,这个json序列化的时候,如果这个字段是零值,则会忽略此字段的序列化,导致json字符串中没有对应的字符串。这对于某些人是困惑的,一般默认是没有omitempty这个tag的,但是。但是来了,但是protobuf生成的pb.......
  • 开发Prometheus的redis bigkey exporter,完善k8s下redis容器的性能监控
      好久没来博客园写技术总结了,回顾这些年的职业路径,从自动化测试到python后端到golang后端直到现在的devops,确实积累了很多心得,可惜都没时间来写写这些心得(主要是懒)。自从转为devops后确实有比较多的时间了(主要是加班少:)),看来以后还是要多写写技术总结:)。   废话不......
  • Spring容器系列-FactoryBean使用/原理
    Spring-FactoryBean使用/原理  概要  在某些情况下,实例化Bean过程比较复杂,若按照传统的方式,则需要在中提供大量的配置信息,不够灵活,这时采用编码的方式能得到一个简单的方案。  Spring为此提供了一个org.springframework.bean.factory.FactoryBean的工厂类接口,用户......
  • Asp.net Core依赖注入(Autofac替换IOC容器)
    ASP.NETCoreASP.NETCore(previouslyASP.NET5)改变了以前依赖注入框架集成进ASP.NET的方法.以前,每个功能-MVC,WebAPI,等.-都有它自己的"依赖解析器(dependencyresolver)"机制并且只是'钩子'钩住的方式有些轻微的区别.ASP.NETCore通过Microsoft.Extensions.......
  • 2024广东省职业技能大赛云计算赛项实战——容器云平台搭建
    容器云平台搭建前言容器镜像使用的是斗学培训平台提供的镜像包,这东西网上都没有,一堆人要,我是靠自己想的方法获取到了,也不敢给。你们可以通过在这个网站申请环境进行操作https://ncc.douxuedu.com/虚拟机使用的是自行创建的CentOS7,如果你不会,那虚拟机创建的流程可以参考我......
  • 1、k8s-容器编排工具-简介-组件-概念
     k8s是谷歌开源的工具本质:一组服务器的集群、它可以在集群的每个节点上运行特定的程序,来对节点中的容器进行管理、他的目的就是实现资源管理的自动化、主要提供了如下的主要功能:·自我修复:一旦某一个容器崩溃,能够在1秒钟左右迅速启动新的容器·弹性伸缩:可以根据需要,......
  • 12、docker-数据卷容器-多个容器之间数据同步----volumes-from
     =========================================================================================测试:让docker02和03继承docker01·三个容器中,如果父容器被删除了,02和03的数据还是会存在的·容器共享的只有做了特殊处理的卷,不是所有的文件都共享,比如下列的volume01和......