web vue 滑动选择 n宫格选中 九宫格选中

页面动态布局经常性要交给客户来操作,他们按时他们的习惯在同一个屏幕内显示若干个子视图,尤其是在医学影像领域对于影像的同屏显示目视对比显的更为重要。

来看看如下的用户体验:

 设计为最多支持5行6列页面展示后,右侧的布局则动态跟随来显示更多影像图像,在目视范围内则可以做出更多读片等判断操作。

下面来给出实现代码。

首先给出页面代码,因页面较为复杂,这里只给核心处的代码,你只需要重点关注el-popover组件位置的使用即可:

<div class="layout-view flex-row jc-center" v-for="layItem in layoutSeriTools":key="layItem.icon" :class="{ 'tool-item-hl': layItem.selected }"@click="seriesLayoutAction(layItem)"><el-image v-if="layItem.tag != 4" class="layout-item" :src="layItem.icon"></el-image><el-popover ref="boxPopover_0" v-else class="layout-item" popper-class="pop-grid-view" placement="right-start"trigger="hover"><div class="v-box-view" @mouseleave="leaveBoxAction(0)"><div class="v-box-item-view" :class="{ 'hili-box': ibox.selected }"v-for="(ibox, ixIndex) in layItem.child" :key="ixIndex"@mouseenter="hoverBoxAction(0, ibox)" @click="boxClickAction(0)"></div></div><el-image slot="reference" class="layout-item" :src="layItem.icon"></el-image></el-popover><el-image v-if="layItem.tag == 4" class="down-view":src="require('@/assets/images/downArrow.png')"></el-image>
</div>

我使用的elmentUI,其主题默认是白色,我根据页面修改了组件的样式:你想改就改,不改就忽略。

<style lang="scss" scoped>
.dropdown-menu-view {background: #222;background-color: #222;border: 2px solid #343434;
}.dropdown-menu-item-view {color: white;&:hover {background-color: rgba(2, 134, 240, 0.2);color: white;}
}
</style><style>
.popperView.el-select-dropdown {border: 2px solid #343434;
}.popperView .el-select-dropdown__list {background-color: #222;
}/* 自定义选中的选项背景色 */
.popperView .el-select-dropdown__item.selected {background-color: rgba(2, 134, 240, 0.2);color: white;
}/* 自定义鼠标悬停的选项背景色 */
.popperView .el-select-dropdown__item:hover {background-color: #ecf5ff;
}.popperView .el-select-dropdown__item {background-color: transparent;&:hover {background-color: rgba(2, 134, 240, 0.2);color: white;}
}.el-popper[x-placement^=top] .popper__arrow::after {border-top-color: #343434;
}.el-popper[x-placement^=top] .popper__arrow {border-top-color: #343434;
}.el-popper[x-placement^=bottom] .popper__arrow::after {border-bottom-color: #343434;
}.el-popper[x-placement^=bottom] .popper__arrow {border-bottom-color: #343434;
}.el-popper[x-placement^=right] .popper__arrow {border-right-color: #343434;
}.el-popper[x-placement^=right] .popper__arrow::after {border-right-color: #343434 !important;
}.pop-grid-view.el-popper {background: #1a1a1a;background-color: #1a1a1a;border: 3px solid #343434;padding: 0px;border-radius: 0px;
}
</style>

 

数据定义,元素从左到右均在数组中定义,只有最后一个元素时,才会显示自定义宫格功能,所以,数据仍然定义在其child中,注意其他元素并没有child。

layoutSeriTools: [{tag: 0,icon: require("@/assets/images/layout-1.png"),title: '',selected: true,toolsId: ''
}, {tag: 1,icon: require("@/assets/images/layout-2.png"),title: '',selected: false,toolsId: ''
}, {tag: 2,icon: require("@/assets/images/layout-3.png"),title: '',selected: false,toolsId: ''
}, {tag: 3,icon: require("@/assets/images/layout-4.png"),title: '',selected: false,toolsId: ''
}, {tag: 4,icon: require("@/assets/images/layout-5.png"),title: '',selected: false,toolsId: '',child: []
}],

 给最后一个元素塞入5行6列的数据,因为VUE本身就是MVVM,即我们好数据,对数据进行直接操作时,页面则会动态渲染。我们不可能愚蠢的去手动一个一个塞!所以这里使用for循环来塞。cols代表第几列,rows代码第几行,通过求商、求余来控制方格的元数据。

let boxItem = aForm.layoutSeriTools.filter(p => p.tag == 4)[0]
for (let i = 0; i < 30; i++) {let e = {selected: false,cols: i % 6,rows: parseInt(i / 6)}boxItem.child.push(e)
}

通过上面的代码就已经可以正常的弹出定义的行列显示,现在添加业务数据的控制逻辑:

 鼠标滑动到哪格中,小于这个格元数据的行、列则选中,否则不选中!这个方法则是核心!

hoverBoxAction(tag, item) {let list = tag == 0 ? this.layoutSeriTools.filter(p => p.tag == 4)[0].child : this.layoutPicTools.filter(p => p.tag == 4)[0].childlet row = item.rowslet col = item.colslist.forEach(m => {m.notClearn = falsem.selected = m.cols <= col && m.rows <= row});
},
boxClickAction(tag) {let tList = tag == 0 ? this.layoutSeriTools:this.layoutPicToolslet list = tList.filter(p => p.tag == 4)[0].childlet nList = list.filter(p => p.selected == true)nList.forEach(m => {m.notClearn = true});tList.filter(p=>p.selected == true).firstObject().selected = falsetList.filter(p=>p.tag == 4).firstObject().selected = truethis.$refs[`boxPopover_${tag}`][0].doClose()
},
leaveBoxAction(tag) {//别有用意,不要随便改时间,只是为了动画同步setTimeout(() => {let list = tag == 0 ? this.layoutSeriTools.filter(p => p.tag == 4)[0].child : this.layoutPicTools.filter(p => p.tag == 4)[0].childlist.forEach(m => {if (!m.notClearn) {m.selected = false}});}, 300);
}

祝你使用丝滑!若有疑问,请发表评论或者私信沟通。 

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

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

相关文章

解决idea使用maven打包时无法将本地lib库文件和resource目录中的资源文件打包进jar文件的问题!!!

一、问题复现 1&#xff09;项目结构如下 我们看到项目中手动添加了本地lib资源&#xff0c;同时bootspring的配置文件和mapper文件也放在了resouces目录中。 2&#xff09;上述结构的项目在使用maven打包时&#xff0c;最终生成的jar文件中将不包含lib库文件&#xff0c;甚…

【短视频矩阵系统==saas技术开发】

在数字媒体领域&#xff0c;短视频的崛起已不可忽视。对于商业实体而言&#xff0c;掌握如何通过短视频平台有效吸引潜在客户并提高转化率&#xff0c;已成为一项关键课题。本文旨在深入剖析短视频矩阵系统的构成与作用机制&#xff0c;以期为企业提供一套系统化的策略&#xf…

C_字符串的一些函数

1.字符串输入函数 scanf("%s",数组名)&#xff1b; gets(数组名)&#xff1b; 区别&#xff1a; scanf(“%s”,数组名); 把空格识别为输入结束 #include <stdio.h>int main() {char a[10];printf("输入&#xff1a;");scanf("%s",a)…

JavaScript实现tab栏切换

JavaScript实现tab栏切换 代码功能概述 这段代码实现了一个简单的选项卡&#xff08;Tab&#xff09;切换功能。它通过操作 HTML 元素的类名&#xff08;class&#xff09;来控制哪些选项卡&#xff08;Tab&#xff09;和对应的内容板块显示&#xff0c;哪些隐藏。基本思路是先…

《网络聊天室项目:全面分析测试报告》

目录 一、项目介绍二、项目功能三、测试计划1. 编写测试用例2. 实际执行测试的部分操作步骤3. 自动化测试 四、项目bug&#xff08;1&#xff09;bug描述&#xff08;2&#xff09;bug描述 五、项目总结 一、项目介绍 网络聊天室项目实现了一个网络交流平台&#xff0c;用户在w…

大数据新视界 -- 大数据大厂之 Hive 数据压缩:优化存储与传输的关键(上)(19/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

软通动力携子公司鸿湖万联、软通教育助阵首届鸿蒙生态大会成功举办

11月23日中国深圳&#xff0c;首届鸿蒙生态大会上&#xff0c;软通动力及软通动力子公司鸿湖万联作为全球智慧物联网联盟&#xff08;GIIC&#xff09;理事单位、鸿蒙生态服务&#xff08;深圳&#xff09;有限公司战略合作伙伴&#xff0c;联合软通教育深度参与了大会多项重磅…

动手学深度学习10.5. 多头注意力-笔记练习(PyTorch)

本节课程地址&#xff1a;多头注意力代码_哔哩哔哩_bilibili 本节教材地址&#xff1a;10.5. 多头注意力 — 动手学深度学习 2.0.0 documentation 本节开源代码&#xff1a;...>d2l-zh>pytorch>chapter_multilayer-perceptrons>multihead-attention.ipynb 多头注…

故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | Transformer-LSTM组合模型的故障诊断(Matlab) 源码设计 %% 初始化 clear close all clc disp(此程序务必用2023b及其以上版本的MATLAB!否则会报错!) warning off %

用html+jq实现元素的拖动效果——js基础积累

用htmljq实现元素的拖动效果 效果图如下&#xff1a; 将【item10】拖动到【item1】前面 直接上代码&#xff1a; html部分 <ul id"sortableList"><li id"item1" class"w1" draggable"true">Item 1</li><li …

单片机学习笔记 12. 定时/计数器_定时

更多单片机学习笔记&#xff1a;单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…

计算机视觉硬件知识点整理六:工业相机选型

文章目录 前言一、工业数字相机的分类二、相机的主要参数三、工业数字摄像机主要接口类型四、选择工业相机的考量因素六、实例分析 前言 随着科技的不断进步&#xff0c;工业自动化领域正经历着前所未有的变革。作为工业自动化的重要组成部分&#xff0c;工业相机在工业检测、…

如何使用brew安装phpredis扩展?

如何使用brew安装phpredis扩展&#xff1f; phpredis扩展是一个用于PHP语言的Redis客户端扩展&#xff0c;它提供了一组PHP函数&#xff0c;用于与Redis服务器进行交互。 1、cd到php某一版本的bin下 /usr/local/opt/php8.1/bin 2、下载 phpredis git clone https://githu…

硬件看门狗工作原理

硬件看门狗是什么&#xff1f; 硬件看门狗&#xff08;Hardware Watchdog&#xff09;是一种用于监控系统运行状态的硬件设备或电路。它的主要功能是检测系统是否正常运行&#xff0c;并在系统出现故障或无响应时自动重启或采取其他恢复措施。 工作原理与引脚 硬件看门狗一般…

Linux -初识 与基础指令1

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【Linux】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 文章目录 &#x1f4da; 前言&#x1f5a5;️ 初识&#x1f510; 登录 root用户&#x1f465; 两种用户➕ 添加用户&#x1f9d1;‍&#x1f4bb; 登录 普通用户⚙️ 常见…

Elasticsearch在liunx 中单机部署

下载配置 1、下载 官网下载地址 2、上传解压 tar -zxvf elasticsearch-XXX.tar.gz 3、新建组和用户 &#xff08;elasticsearch 默认不允许root账户&#xff09; #创建组 es groupadd es #新建用户 useradd ryzhang -g es 4、更改文件夹的用户权限 chown -R ryzhang …

Refit 使用详解

Git官网&#xff1a;https://github.com/reactiveui/refit Refit 是一个针对 .NET 应用程序的 REST API 客户端库&#xff0c;它通过接口定义 API 调用&#xff0c;从而简化与 RESTful 服务的交互。其核心理念是利用声明性编程的方式来创建 HttpClient 客户端&#xff0c;使得…

Ubuntu24.04配置DINO-Tracker

一、引言 记录 Ubuntu 配置的第一个代码过程 二、更改conda虚拟环境的默认安装路径 鉴于不久前由于磁盘空间不足引发的重装系统的惨痛经历&#xff0c;在新系统装好后当然要先更改虚拟环境的默认安装路径。 输入指令&#xff1a; conda info可能因为我原本就没有把 Anacod…

vulnhub靶场【哈利波特】三部曲之Aragog

前言 使用virtual box虚拟机 靶机&#xff1a;Aragog : 192.168.1.101 攻击&#xff1a;kali : 192.168.1.16 主机发现 使用arp-scan -l扫描&#xff0c;在同一虚拟网卡下 信息收集 使用nmap扫描 发现22端口SSH服务&#xff0c;openssh 80端口HTTP服务&#xff0c;Apach…

顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测(Maltab)

顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测&#xff08;Maltab&#xff09; 目录 顶刊算法 | 鱼鹰算法OOA-BiTCN-BiGRU-Attention多输入单输出回归预测&#xff08;Maltab&#xff09;效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实…