【前端】Vue项目:旅游App-(24)useScroll:加强useScroll的功能性,监听窗口和页面的滚动

2023-11-04

本项目博客总结:【前端】Vue项目:旅游App-博客总结

窗口和页面滚动相关链接:【前端】如何判断是页面滚动还是窗口滚动_karshey的博客-CSDN博客

import { ref } from "vue"
import { onMounted, onUnmounted } from '@vue/runtime-core';
import { throttle } from 'underscore'

export default function useScroll(elRef) {
    let el = window
    const isReachBottom = ref(false)
    const isDetailShowTabControl=ref(false)
    const clientHeight = ref(0)
    const scrollTop = ref(0)
    const scrollHeight = ref(0)

    // 监听屏幕滚动:这里是窗口的滚动
    const scrollListener = throttle(() => {
        // 监听窗口的滚动
        if (el === window) {
            // 客户的屏幕长度
            clientHeight.value = document.documentElement.clientHeight
            // 当前距离顶部长度
            scrollTop.value = document.documentElement.scrollTop
            // 页面总体长度
            scrollHeight.value = document.documentElement.scrollHeight
        }
        // 监听页面的滚动
        else {
            clientHeight.value = el.clientHeight
            scrollTop.value = el.scrollTop
            scrollHeight.value = el.scrollHeight
        }
        if (scrollHeight.value <= scrollTop.value + clientHeight.value) {
            console.log('滚动到底部')
            isReachBottom.value = true
        }
        if(scrollTop.value>=540){
            isDetailShowTabControl.value=true
        }else{
            isDetailShowTabControl.value=false
        }

        // console.log('监听到滚动')
        // console.log(scrollTop.value,isDetailShowTabControl.value)
    }, 100)

    onMounted(() => {
        if (elRef) {
            el = elRef.value
        }
        el.addEventListener('scroll', scrollListener)
    })

    onUnmounted(() => {
        el.removeEventListener('scroll', scrollListener)
    })

    return { isReachBottom, scrollTop, scrollHeight,clientHeight,isDetailShowTabControl }
}

若不传入elRef,或传入为空,则监听窗口window的滚动。

传入elRef则是对应页面的响应式(此处对页面的定义:设置了高度)。

举个例子:

这里detailRef是detail这个元素对应页面的响应式。

<div class="detail top-page" ref="detailRef">

调用,这里的useScroll监听的是detail页面。

useScroll(detailRef)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【前端】Vue项目:旅游App-(24)useScroll:加强useScroll的功能性,监听窗口和页面的滚动 的相关文章

随机推荐

  • su incorrect password问题 su无法切换用户问题 以及权限s、t、i、a补充

    摘要 最近遇到一个问题 在测试环境上发现使用su无法切换账户 但是这两个账户都是可以登录的 于是就开始百度 找到了解决问题的办法 解决方案如下 第一步 使用root用户登录系统 或者有root权限的用户登录 第二步 查看文件权限 例如 ll
  • win10系统QQ音乐安装包无法打开解决方法!

    在QQ音乐官网上下载了QQ音乐的安装包 结果执行安装包程序后无法打开安装 右键管理员模式也无法打开 试了很多方法也不行 最后听取建议卸载了电脑上的火绒安全后重启电脑 再从官网重新下载QQ音乐安装包就可执行 听说网易的有道云笔记和腾讯视频等类
  • python requests编码的问题_Requests 库编码问题及引出的 Python 编码问题

    Requests 编码 在使用 requests 访问微信接口的时候 requests 只根据 http headers 的信息来设置编码集 文档如下 response text Content of the response in uni
  • Qt_自定义控件

    1 自定义控件的步骤 一般先在类的私有属性中添加控件对象 然后在该类的构造函数中添加布局 connect函数等 若是指针类型 那构造函数中要new 就不用再setParent 若一般类型 那构造函数中要setParent 让控件显示在界面上
  • TVM概述

    TVM TVM是陈天奇领导的一个DL加速框架项目 它处于DL框架 如tensorflow pytorch 和硬件后端 如CUDA OpenCL 之间 兼顾了前者的易用性和后者的执行效率 官网 https tvm apache org 代码
  • Linux 下进程间通讯之内存映射详解

    引用 前面的系列文章介绍管道 本文介绍另外一种比较高效的进程间通讯方式 内存映射 文章目录 一 内存映射概述 二 内存映射 API mmap 函数 munmap 函数 API 使用注意事项 三 内存映射使用场景 内存映射实现进程间通信 匿名
  • 基于SSM+Vue的鲸落文化线上体验馆设计与实现

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 采用Vue技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Mave
  • Java集合之Map

    Map接口 重点 1 Map接口概述 Map与Collection并列存在 都是属于java util包下的平级关系 用于保存具有映射关系的数据 key value 键值对 entry Map中的key和value可以是任何引用类型的数据
  • softmax算法——处理分类问题

    一 介绍 softmax基本可以算是分类任务的标配 本篇介绍softmax是什么 以及softmax图解和举例 二 什么是softmax 现实生活中需要对某一问题进行多种分类 例如对图片进行分类的例子 这时就需要使用softmax算法 so
  • Linux命令解读(一):head -n 80 /dev/urandom

    head n 80 dev urandom tr dc A Za z0 9 head c 22 该命令是针对 微信小程序登录 生成 3rd session 的命令 官方推荐 3rd session有2 128种组合 此处每一位可为A Za
  • 这 12 个实用的 HTML标签(组件)建议尽早用上

    大家好 今天给大家分享一篇阅读的文章 本篇文章主要讲了 12 个 HTML 标签 组件 通过这些标签避免你在项目中集成复杂第三方组件 比如日历组件 颜色选择 进度条等 简单的标签就能很方便的调用系统组件 一 颜色选择组件 Color Pic
  • Python在商业分析中数据挖掘算法

    学习如何在 Python 一种免费的开源软件 中实现各种流行的数据挖掘算法 以解决业务问题和机遇 涵盖用于预测 分类 可视化 降维 推荐系统 聚类 文本挖掘和网络分析的统计和机器学习算法 内容 数据挖掘介绍 数据挖掘过程 数据可视化 降维
  • Docker介绍

    Docker是什么 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的Linux或Windows操作系统的机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之间不会有任
  • [ 应急响应基础篇 ] Windows系统隐藏账户详解(Windows留后门账号)

    博主介绍 博主介绍 大家好 我是 PowerShell 很高兴认识大家 主攻领域 渗透领域 数据通信 通讯安全 web安全 面试分析 点赞 评论 收藏 养成习惯 一键三连 欢迎关注 一起学习 一起讨论 一起进步 文末有彩蛋 作者水平有限 欢
  • R升级和包更新

    1 R升级 安装包 installr install packages installr 导入包 library installr 升级 updateR 2 包升级 包升级 update packages 3 安装包 选择镜像 option
  • 密码基础知识(3)---对称密码体制

    目录 一 对称密码概念 二 别名 三 对称密码体制的优缺点 1 对称密码体制的缺点 2 对称密码体制的优点 四 对称密码的分类 1 序列密码 2 分组密码 五 分组密码的分组模式 1 ECB模式 Electronic CodeBook mo
  • 完美解决Windows 10与Ubuntu相互ping不通的问题

    问题 在Windows命令行窗口ping Ubuntu时总是显示请求超时 数据包全部丢失 Windows系统与Ubuntu相互ping不通的根本原因是其不在同一网段上 SSH已安装与配置好 接下来解决以下问题 第一步使用ip addr查看U
  • 微信小程序上拉触底事件函数onReachBottom不触发的解决方案

    造成不触发的原因可能有以下几种情况 配置属性问题 高度问题 滚动条不在顶部 需要回到顶部重新计算高度 onReachBottom函数被覆盖 1 配置属性问题 在app json或者本页的json文件中配置onReachBottomDista
  • 嵌入式Linux中TP调试笔记

    触摸屏一般是通过IIC来传输触摸点的坐标给Linux内核 一般而言 其步骤是 当人触摸触摸屏时 触摸屏会产生一个中断信号给Linux内核 内核接收到中断信号后便会通过IIC去触摸IC里读取数据 因此调试TP驱动时 应该进行下列步骤 这里我以
  • 【前端】Vue项目:旅游App-(24)useScroll:加强useScroll的功能性,监听窗口和页面的滚动

    本项目博客总结 前端 Vue项目 旅游App 博客总结 窗口和页面滚动相关链接 前端 如何判断是页面滚动还是窗口滚动 karshey的博客 CSDN博客 import ref from vue import onMounted onUnmo