vue3顶部内容固定定位,下面内容可以向上滚动

功能要求:一个div里有两个模块儿,顶部按钮模块儿和下面的内容区域模块儿,顶部按钮模块儿固定在顶部不随滚动条滚动,下面内容区域可以滚动

如图:

 

 思路是:

1、顶部按钮固定定位,会脱离文档流,下面内容区域需要加一个margin-top,margin-top的值是上面顶部按钮模块儿的高度

2、需要实时获取顶部按钮模块儿的高度

1、监听某一元素的高度,封装自定义指令

第一步:在utils文件里创建directive文件夹,在directive文件夹下创建一个resizeObserver.js文件

代码如下:

// 监听元素大小变化的指令
const map = new WeakMap()
const ob = new ResizeObserver((entries) => {for (const entry of entries) {// 获取dom元素的回调const handler = map.get(entry.target)//存在回调函数if (handler) {// 将监听的值给回调函数handler({width: entry.borderBoxSize[0].inlineSize,height: entry.borderBoxSize[0].blockSize})}}
})
export const Resize = {mounted(el, binding) {//将dom与回调的关系塞入mapmap.set(el, binding.value)//监听el元素的变化ob.observe(el)},unmounted(el) {//取消监听ob.unobserve(el)}
}
export default Resize

 第二步:在directive文件夹再创建一个index.js文件,目的是为了集中注册自定义指令

import { Resize } from "./resizeObserver"
// 自定义指令集合
const directives = {Resize,
}
export default {install(app) {Object.keys(directives).forEach((key) => {app.directive(key, directives[key])})}
}

第三步:在main.js文件进行全局注册

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import directives from "./utils/directive/index"
createApp(App).use(directives).mount('#app')

 2、使用自定义指令

<script setup>
import {watch, onMounted, ref} from 'vue'
let ulHeight = ref(0)
const onResize = (dom) => {console.log(dom.height) // dom为元素变化后的宽高ulHeight.value = dom.height
}
</script>
<template><div class="fatherTop"><ul id="ulHeight" v-resize="onResize"><li v-for="item in 19"><el-button type="primary">{{ item }}今天是个好日子</el-button></li></ul><div class="contentDiv" :style="{'margin-top': ulHeight+'px'}">{{ ulHeight }}</div></div></template>
<style>
ul{width: 40%;margin: 0;padding: 0;position: fixed;top: 0;
}
ul li{white-space: nowrap;display: inline-block;margin: 0 10px 10px 0;list-style: none;
}
.contentDiv{width: 200px;height: 1200px;background: #369;
}
</style>

这样就会随着顶部按钮高度变化,下面内容区域的margin-top自动变化

验证的话可以通过控制台修改ul的宽度看到效果 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

两阶段提交协议三阶段提交协议

两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中&#xff0c;各个节点之间在物理上相互独立&#xff0c;通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范&#xff08;即接口函数&#xff09;&#xff0c;交易…

sublime text 打开 txt 文档乱码问题

对于 windows 系统使用系统自带的 txt 编辑工具&#xff0c;默认打开和保存文件的文件的格式是 GBK 或者 GB2312&#xff0c;而 sublime 默认仅支持 utf-8&#xff0c;所以当从 windows 系统拷贝文件在 mac 上浏览有时候会出现乱码的问题&#xff0c;这时候就需要安装插件使 su…

python统计分析——直方图(plt.hist)

使用matplotlib.pyplot.hist()函数绘制直方图 from matplotlib.pyplot as pltdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) 下面介绍plt.hist()函数中常用的几个重要参数&#xff08;参数等号后为默认设置&#xff09;&#xff1a; &#xff08;1&#xff0…

Linux基础——进程初识(二)

1. 对当前目录创建文件的理解 我们知道在创建一个文件时&#xff0c;它会被默认创建到当前目录下&#xff0c;那么它是如何知道当前目录的呢&#xff1f; 对于下面这样一段代码 #include <stdio.h> #include <unistd.h>int main() {fopen("tmp.txt", …

Web 自动化测试过程中会遇到哪些问题?

作者&#xff1a;木可 链接&#xff1a;https://www.zhihu.com/question/636965892/answer/3341410674 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 Web自动化是指使用测试脚本来自动执行网页上的任务。这包括填…

螺丝厂家:家具螺丝的类型和规格

作为家具厂采购经理&#xff0c;您是否经常对如何选择合适的家具螺钉困惑不已&#xff1f;您想了解不同种类和型号家具螺钉特征和适用场景吗&#xff1f;你想找专业指南来帮助你提升产品质量和稳定性吗&#xff1f;假如你有这些困惑&#xff0c;那么就来对地方了&#xff01; 在…

Python遍历读取 A 文件夹中的 A1、A2、A3、A4、A5 中的各子文件夹中的图片,并对每张图片处理后保存到指定路径

目录 一、具体步骤二、文件夹目录结构样例三、代码四、实例遍历处理后结果五、总结 一、具体步骤 首先&#xff0c;指定 A 文件夹的路径和重命名后的文件夹路径。 然后&#xff0c;遍历 A 文件夹中的各子文件夹。 在每个子文件夹中&#xff0c;遍历所有文件。 读取每个文件&am…

使用 Swagger 导入 Postman: 最佳实践与步骤解析

Swagger和 Postman 都是常用的 API 测试工具&#xff0c;都有各自的优势。为了结合两者的优点&#xff0c;我们可以考虑将 Swagger 中的 API 定义导入到 Postman 中去&#xff0c;这样就可以利用 Postman 更强大的测试功能来测试 Swagger 定义的接口。 下面将以 Swagger Petst…

知虾会员**成为知虾会员,尊享专属权益**

在当今繁忙的生活中&#xff0c;线上购物已经成为现代人们的主要消费方式之一。而作为线上购物平台的领军者之一&#xff0c;Shopee为了提供更加个性化和便利的购物体验&#xff0c;推出了知虾会员&#xff08;Shopee会员&#xff09;服务。知虾会员不仅可以享受到一系列会员专…

LeetCoed刷题:21. 合并两个有序链表

题目&#xff1a; 是否独立解出&#xff1a;否 解题时的思路与想法&#xff1a;解题时有几个问题&#xff1a; 1.怎么遍历两个数组&#xff0c;嵌套两个while循环不能实现&#xff08;后面通过看题解知道list1&#xff01;null&&list2&#xff01;null&#xff09; …

修改 docker /dev/shm 的大小

修改 docker /dev/shm 的大小 1&#xff0c;获取完整id&#xff1a; docker inspect 245| grep Id rootlynxi:~# docker inspect 245| grep Id"Id": "245ab167ed9a79873b31b3a38df2053870fe72f267c3c1a660df25c63e37e88b",2&#xff0c;修改 ShmSize&…

函数模板和类模板(初阶)

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生&#x1f43b;‍❄个人主页&#x1f389;&#xff1a;GOTXX&#x1f43c;个人WeChat&#xff1a;ILXOXVJE&#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&am…

【springboot配置文件加载源码分析】

在Spring Boot的源码中&#xff0c;配置文件的加载是在应用程序启动的早期阶段进行的。具体来说&#xff0c;配置文件加载的主要步骤发生在SpringApplication类的run()方法中的prepareEnvironment方法中&#xff0c;真正读取我们的配置文件还是PropertySourceLoader。 本篇博客…

哪个牌子最值得购买?好用的洗地机排行榜

随着生活水平的提高&#xff0c;人们对家庭卫生的重视程度也越来越高&#xff0c;家用洗地机成为了现代家庭清洁中不可或缺的一部分。2024年的品牌排行榜也开始逐渐浮出水面&#xff0c;消费者们对于哪个品牌的家用洗地机更值得信赖也开始产生了新的讨论。接下来&#xff0c;让…

跟我用路由器学Linux编程实例四

专栏目录 第一章 简单编程实现花生壳的ddns功能 第二章 让花生壳ddns脚本自动工作 第三章 同时解析多个花生壳域名的脚本 第四章 具有通用性的花生壳ddns脚本 用折腾路由的兴趣&#xff0c;顺便入门shell编程。 第四章 具有通用性的花生壳ddns脚本 文章目录 专栏目录第四章 具…

C语言快速入门——基础知识

C语言基础 C语言基础C程序基本格式基本数据类型原码、反码和补码原码反码补码 整数类型浮点类型字符类型 变量变量的使用无符号数类型转换 运算符基本运算符运算符优先级自增自减运算符位运算符逻辑运算符 流程控制分支语句 - if分支语句 - switch循环语句 - for循环语句 - whi…

Ebean:一款被低估的ORM框架

ORM框架为什么不香&#xff1f; 对ORM框架的偏见 看了一些MyBaties与Hibernate进行对比的文章。可能是因为一些Hibernate历史原因&#xff0c;国内对于Hibernate普遍存在偏见&#xff0c;我摘抄了几点&#xff1a; 1. hibernate是全自动&#xff0c;而mybatis是半自动 hibernat…

如何让软文真正起效?媒介盒子为你解答

在如今这个互联网大环境下&#xff0c;想要写出有价值的软文去“忽悠”用户其实是不简单的&#xff0c;那我们应该怎么做才能让软文真正起效呢&#xff1f;媒介盒子为你解答。 一、软文写作前 1.了解平台特性 每个平台都有自己的定位。有的定位于以分享专业知识为主&#xff…

某和医院招采系统web端数据爬取, 逆向js

目标网址:https://zbcg.sznsyy.cn/homeNotice 测试时间: 2024-01-03 1 老规矩,打开Chrome无痕浏览,打开链接,监测网络,通过刷新以及上下翻页可以猜测出数据的请求是通过接口frontPageAnnouncementList获取的,查看返回可以看出来数据大概率是经过aes加密的,如图: 通过查看该请…

014、枚举与模式匹配

枚举类型&#xff0c;通常也被简称为枚举&#xff0c;它允许我们列举所有可能的值来定义一个类型。在本篇文章中&#xff0c;我们首先会定义并使用一个枚举&#xff0c;以向你展示枚举是如何连同数据来一起编码信息的。 接着&#xff0c;我们会讨论一个特别有用的枚举&#xff…