vue前端自适应布局,一步到位所有自适应

news/2024/11/18 21:28:21/文章来源:https://www.cnblogs.com/lgx211/p/18348797

vue前端自适应布局,一步到位所有自适应

页面展示


实现内容

1,左右布局

  • 左侧固定宽带,右侧自适应剩余的宽度。
  • 中间一条分割线,可以拖拉,自适应调整左右侧的宽度。
  • 左侧的高度超长自动出现横向滚动条,左侧宽度超长,自动出现竖向滚动条。

2,上中下布局

  • 最上面的 搜索条件 div 固定占用 100 px 高度,下面的 查询条件 div 固定占用 30 px 高度,最下面的分页固定占用高度,页面剩下的高度自动分配给中间的表格内容。
  • 表格内容高度超过后自动出现竖向滚动条,宽度超出后自动出现横向滚动条。
  • 点击按钮,可以 隐藏/显示 搜索条件 div 里面的内容。
  • 当隐藏 搜索条件 div 里面的内容时,中间表格的高度为:整个页面的高度—操作按钮div的高度—分页div的高度。
  • 当搜索条件 div 里面的内容时,中间表格的高度为:整个页面的高度—搜索条件div的高度—操作按钮div的高度—分页div的高度。

3,分辨率自适应

  • 加载即动态实时计算高度,宽度

实现代码

<template><div class="app-container"><div class="left" :style="{ width: leftWidth + 'px' }"><div class="right-center-left">左边的内容,可以很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br /></div></div><div class="divider" @mousedown="startDragging"></div><div class="right"><div v-if="showDiv1" class="div1">查询条件</div><div class="div2"><button @click="toggleDiv1">操作按钮 div1</button></div><div class="div3" :style="{ height: div3Height + 'px' }">1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br />1<br /></div><div class="div4">分页</div></div></div>
</template><script>
export default {name: "AppContainer",data() {return {isDragging: false,leftWidth: 200,showDiv1: true};},computed: {div3Height() {const totalHeight = window.innerHeight;const div2Height = 30;const div4Height = 30;const div1Height = this.showDiv1 ? 100 : 0;// 计算 div3 的高度return totalHeight - div2Height - div4Height - div1Height;}},methods: {startDragging(e) {this.isDragging = true;document.addEventListener("mousemove", this.onDrag);document.addEventListener("mouseup", this.stopDragging);},onDrag(e) {if (this.isDragging) {const minWidth = 50;const maxWidth = window.innerWidth - 50;const newLeftWidth = e.clientX;if (newLeftWidth > minWidth && newLeftWidth < maxWidth) {this.leftWidth = newLeftWidth;}}},stopDragging() {this.isDragging = false;document.removeEventListener("mousemove", this.onDrag);document.removeEventListener("mouseup", this.stopDragging);},toggleDiv1() {this.showDiv1 = !this.showDiv1;}}
};
</script><style scoped>
.app-container {display: flex;height: 100vh;overflow: hidden;
}.left {overflow-x: auto;overflow-y: auto;white-space: nowrap;min-width: 90px;
}.divider {width: 5px;cursor: ew-resize;background-color: #ccc;
}.right {display: flex;flex-direction: column;height: 100%;flex: 1; /* 自动填满剩余宽度 */
}.div1 {height: 100px;background-color: #f0f0f0;
}.div2 {height: 30px;background-color: #ddd;
}.div3 {overflow-x: auto; /* 添加横向滚动条 */overflow-y: auto; /* 添加纵向滚动条 */background-color: #f5f5f5;
}.div4 {height: 200px;background-color: #ccc;
}
</style>

实现感想

这个功能,从毕业就开始思索,直到八年后的今天成熟完善,真是艰辛也是很不容易。目前市面上没有见过有人实现,很多人都是只言片语的,基本复制下来,无法达到效果。我这个一键复制到自己的项目,就能实现了,中间的坎坷不平,到了完全实现的这一刻,才觉得激动不已。

无任何坑,也没有任何额外的引入,一个普普通通,最简单的vue页面,布局建好,里面的内容就可以自己随意发挥了。

未觉池塘春草梦,阶前梧叶已秋声。记录激动时刻,也造福后来人。

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

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

相关文章

IgniteFAQ-11-ignite嵌入式模式下如何使用命令行

java -cp {libs目录} sqlline.SqlLine --verbose=true -u jdbc:ignite:thin://127.0.0.1:10800 其中cp是包含ignite核心jar包和sqlline相关的包 本文来自博客园,作者:life_start,转载请注明原文链接:https://www.cnblogs.com/yangh2016/p/18348781

京东小程序数据中心架构设计与最佳实践

一、京东小程序是什么京东小程序平台能够提供开放、安全的产品,成为品牌开发者链接京东内部核心产品的桥梁,致力于服务每一个信任我们的外部开发者,为不同开发能力的品牌商家提供合适的服务和产品,让技术开放成为品牌的新机会。“Once Build, Run Anywhere”,一个小程序可…

IgniteFAQ-6-Ignite 通过zk组网时集群组网失败

zk组网类 ZookeeperDiscoverySpi zkDiscoverySpi = new ZookeeperDiscoverySpi();cfg.setDiscoverySpi(zkDiscoverySpi);配置示例: # ignite 集群租房方式,配置 zk 为,zk 集群组网方式 fc.mybatis.ignite.discovery=zk # Ignite zk 集群组网方式 ignite.discoverySpi.zkConn…

AI入门之深度学习:基本概念篇

1、什么是深度学习 1.1、机器学习图1:计算机有效工作的常用方法:程序员编写规则(程序),计算机遵循这些规则将输入数据转换为适当的答案。这一方法被称为符号主义人工智能,适合用来解决定义明确的逻辑问题,比如早期的PC小游戏:五子棋等,但是像图像分类、语音识别或自然…

前后端分离项目,后期前端身份验证的麻烦

软件构成后端 后端是一个asp.netcore webapi项目,使用jwt进行身份验证和鉴权。 前端 前端是一个基于http协议的asp.netcore RezorPage项目,但实际上完全使用的wwwwroot目录下的静态文件。没有使用RazorPage。目前只有后端接口鉴权,前端页面任意访问 身份验证需求 这两天安全…

IgniteFAQ-2-CacheWriterException: Failed to write entries in database

ignite同步或者异步落库数据到DB时,如果因为落库的数据不满足db库的要求,如长度、精度、nonull等限制,就会出现落库失败报Failed to write entries in database错误。 ignite异步落库默认时5秒或者10240条flush一次,失败的数据会不断尝试,当存在一条数据以为数据库要求失败…

Leetcode: 586. Customer Placing the Largest Number of Orders

题目要求如下:给出的例子如下:简单地说就是要找出表中订单最多客户的ID。 使用如下的代码进行实现: import pandas as pddef largest_orders(orders: pd.DataFrame) -> pd.DataFrame:return orders.groupby("customer_number").count().reset_index().nlargest(1,…

攻防世界CTF web方向

入门题鉴赏 disabled_button https://adworld.xctf.org.cn/challenges/list 解决思路:因为说的是前端的button坏掉了,于是我们用查看器查看他的页面源代码,发现有个disabled,就是不能的意思将 disabled 删掉即可! 总结:前端JS代码查看修改weak_auth https://adworld.xctf…

前端使用 Konva 实现可视化设计器(20)- 性能优化、UI 美化

这一章主要分享一下使用 Konva 遇到的性能优化问题,并且介绍一下 UI 美化的思路,主要使用 Naive UI。这一章主要分享一下使用 Konva 遇到的性能优化问题,并且介绍一下 UI 美化的思路。至少有 2 位小伙伴积极反馈,发现本示例有明显的性能问题,一是内存溢出问题,二是卡顿的…

【日记】感觉自己越来越摆了(546 字)

正文今天想了很多乱七八糟的事情,但最后都没有什么结论。这种情况一般称为:内耗。擦药的地方有些好点了,又有一些新的地方冒了出来。参加工作一年多了,现在却才开始越发受不了这种生活。好想要什么时候参加一次正规的半程马拉松比赛。只要完赛就好了。两次旅行的行程依然没…

二叉树的递归套路

对于二叉树的经典递归套路的理解二叉树的递归套路 二叉树结构 二叉树是一个将数据组织成头尾相连的特殊链表,每一个数据单元与链表一样有一个指向其的指针,但与链表不同的是其可以有两个指向其他单元的指针,分别是其左孩子与右孩子。采用该这种结构,最终数据的呈现形式会与…

[rCore学习笔记 023]任务切换

导读 还是要先看官方手册. 学过DMA的同志可能比较好理解,一句话, 释放CPU总线 : 如果把应用程序执行的整个过程进行进一步分析,可以看到,当程序访问 I/O 外设或睡眠时,其实是不需要占用处理器的,于是我们可以把应用程序在不同时间段的执行过程分为两类,占用处理器执行有效…