当前位置: 首页 > news >正文

unity双层滑动实现

实现功能:
当滑动列表中内容处于顶端的时候,向上滑动优先滑动整个滑动列表,当滑动列表移动到设置位置,即设定的最高处时,继续移动列表内内容。向下移动亦然,当内容处于滑动列表顶端时,移动整个滑动列表。

eventtriggerlistener脚本可在这篇查看unity防止ui点击事件被子物体拦截

using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;public class ScrollViewMove : MonoBehaviour
{public ScrollRect m_scorllView;public RectTransform m_rectView;private void Start(){//添加滑动事件Graphic horizontalGraphic = m_scorllView.GetComponent<Graphic>();if (horizontalGraphic != null && horizontalGraphic.raycastTarget){EventTriggerListener.Get(m_scorllView.gameObject).onBeginDrag = OnScrollBeginDrag;EventTriggerListener.Get(m_scorllView.gameObject).onDrag = OnScrollDrag;EventTriggerListener.Get(m_scorllView.gameObject).onEndDrag = OnScrollEndDrag;}//设置最高高度,和出现滑动时的阈值m_minHeight = m_scorllView.GetComponent<RectTransform>().localPosition.y;m_LimitY = (m_maxHeight - m_minHeight) * MOVE_DISTANCE_SCALE;}#region 滑动条事件//起始滑动位置private float m_startScrollHeight = 0f;//结束滑动位置private float m_endScrollHeight = 0f;//限制切换动画的最小判断private float m_LimitY;private readonly float MOVE_DISTANCE_SCALE = 0.2f;//起始鼠标位置private float m_startMouseHeight = 0f;//中途鼠标位置private float m_partMouseHeight = 0f;//最大高度private float m_maxHeight = 0f;//最小高度private float m_minHeight = 0f;//是否为展开状态private bool m_isOpen = false;/// <summary>/// 滑动列表开始拖拽事件/// </summary>/// <param name="obj"></param>private void OnScrollBeginDrag(GameObject obj){m_startScrollHeight = m_scorllView.GetComponent<RectTransform>().localPosition.y;m_startMouseHeight = Input.mousePosition.y;}/// <summary>/// 滑动列表拖拽事件/// 先判断走拖拽事件还是滑动列表滑动事件/// </summary>/// <param name="obj"></param>private void OnScrollDrag(GameObject obj){m_partMouseHeight = Input.mousePosition.y;float m_offsetHeight = m_partMouseHeight - m_startMouseHeight;m_startMouseHeight = m_partMouseHeight;float scrollPosY = m_scorllView.GetComponent<RectTransform>().localPosition.y;if (scrollPosY >= m_maxHeight){if (m_offsetHeight >= 0){m_scorllView.vertical = true;return;}else{if (m_scorllView.verticalNormalizedPosition < 1){m_scorllView.vertical = true;return;}}}else if (scrollPosY <= m_minHeight){if (m_offsetHeight <= 0){m_scorllView.vertical = true;return;}else{if (m_scorllView.verticalNormalizedPosition > 1){m_scorllView.vertical = true;return;}}}m_scorllView.verticalNormalizedPosition = 1;m_scorllView.vertical = false;OnPosDrag(m_offsetHeight);}/// <summary>/// 设置滑动位置/// </summary>/// <param name="offset"></param>private void OnPosDrag(float offset){//设置滑动列表位置Vector3 scrollPos = m_scorllView.GetComponent<RectTransform>().localPosition;float endPosY = scrollPos.y + offset;if (endPosY > m_maxHeight){offset = m_maxHeight - scrollPos.y;}else if (endPosY < m_minHeight){offset = m_minHeight - scrollPos.y;}scrollPos = new Vector3(scrollPos.x, scrollPos.y + offset, scrollPos.z);m_scorllView.GetComponent<RectTransform>().localPosition = scrollPos;//设置滑动列表遮罩大小Vector2 viewPos = m_rectView.offsetMin;viewPos = new Vector2(viewPos.x, viewPos.y - offset);m_rectView.offsetMin = viewPos;}/// <summary>/// 滑动列表结束拖拽事件/// </summary>/// <param name="obj"></param>private void OnScrollEndDrag(GameObject obj){m_endScrollHeight = m_scorllView.GetComponent<RectTransform>().localPosition.y;float offset = m_endScrollHeight - m_startScrollHeight;if (Mathf.Abs(offset) >= m_LimitY){m_isOpen = (offset > 0);}ScrollDragAni(m_isOpen);}//动画播放时间private readonly float TWEEN_POS_TIME = 0.2f;/// <summary>/// 滑动条动画/// </summary>/// <param name="isOpen"></param>private void ScrollDragAni(bool isOpen){Vector3 scrollPos = m_scorllView.GetComponent<RectTransform>().localPosition;if (isOpen){DOTween.To(() => scrollPos.y,(v) =>{Vector3 tmpVec = m_scorllView.GetComponent<RectTransform>().localPosition;float offset = v - tmpVec.y;OnPosDrag(offset);}, m_maxHeight, TWEEN_POS_TIME).OnComplete(() => { m_isOpen = true; });}else{DOTween.To(() => scrollPos.y,(v) =>{Vector3 tmpVec = m_scorllView.GetComponent<RectTransform>().localPosition;float offset = v - tmpVec.y;OnPosDrag(offset);},  m_minHeight, TWEEN_POS_TIME).OnComplete(() => { m_isOpen = false; });}}#endregion
}

设置,在滑动列表中,将ViewPort设置成顶端锚点
在这里插入图片描述

相关文章:

unity双层滑动实现

实现功能&#xff1a; 当滑动列表中内容处于顶端的时候&#xff0c;向上滑动优先滑动整个滑动列表&#xff0c;当滑动列表移动到设置位置&#xff0c;即设定的最高处时&#xff0c;继续移动列表内内容。向下移动亦然&#xff0c;当内容处于滑动列表顶端时&#xff0c;移动整个滑…...

浅谈AI技术创业有哪些机会?

一、AI技术创业概念简介 AI技术创业指的是利用人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;技术进行创业活动。人工智能是指计算机系统能够模拟和展现出人类智能的一种技术。在AI技术创业中&#xff0c;创业者利用AI技术来解决现实生活中的问题&…...

大数据-TXT文本重复行计数工具

支持系统类型&#xff1a;Windows 64位系统 Linux 64位系统 苹果64位系统 硬盘要求&#xff1a;固态硬盘&#xff08;有效剩余磁盘空间大小最低3倍于大数据文件的大小&#xff09; 内存要求&#xff1a;最低8G&#xff08;例如只有几百G数据&#xff09; 如果处理TB级大数据文…...

【无标题】331

2024年3月31日19:26:09 和一个好感度为40的女生完成了一次基础的对话 2024年3月31日19:26:26 在群里完成了一个毫无所谓的对话 2024年3月31日19:40:04开始准备写论文了 2024年3月31日19:40:11好感度为40的女生回复了我本质上是回复率只有40的人回复了我那应该感到高兴才对 …...

MIT最新研究成果 机器人能够从错误中纠偏 无需编程介入和重复演示

目前科学家们正在努力让机器人变得更加智能&#xff0c;教会他们完成诸如擦拭桌面&#xff0c;端盘子等复杂技能。以往机器人要在非结构化环境执行这样的任务&#xff0c;需要依靠固定编程进行&#xff0c;缺乏场景通用性&#xff0c;而现在机器人的学习过程主要在于模仿&#…...

C语言—指针数组

从键盘任意输入一个整型表示的月份值&#xff0c;用指针数组编程输出该月份的英文表示&#xff0c;若输入的月份值不在1&#xff5e;12之间&#xff0c;则输出“Illegal month”。 **输入格式要求&#xff1a;"%d" 提示信息&#xff1a;"Input month number:&q…...

OpenCV图像二值化

1.二值图像 灰度图像 0 - 255二值图像 0&#xff08;黑&#xff09; / 255&#xff08;白&#xff09; 2.二值分割 五种阈值分割方法&#xff08;阈值T&#xff09;&#xff1a; 大于T为255&#xff0c;小于T为0 大于T为0&#xff0c;小于T为255 小于T为原值 else T 小于…...

java中的抽象类

抽象类是指包含了抽象方法的类。在java中&#xff0c;抽象方法指的是用abstract关键字进行修饰的方法&#xff0c;抽象方法与普通的方法的最大区别就是抽象方法没有方法体&#xff0c;也就是说抽象方法是没有具体的实现的。这也就意味着在抽象类的子类中调用抽象方法时&#xf…...

代码随想录算法训练营第二十天| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

系列文章目录 目录 系列文章目录654.最大二叉树递归法[左闭右开)[左闭右闭] 617.合并二叉树递归法&#xff08;前中后序都可&#xff0c;以前序为例&#xff09;迭代法&#xff08;类似 101. 对称二叉树 写法&#xff0c;可用双端队列/单端队列<栈>&#xff0c;以单端队列…...

2014年认证杯SPSSPRO杯数学建模A题(第二阶段)轮胎的花纹全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 A题 轮胎的花纹 原题再现&#xff1a; 轮胎被广泛使用在多种陆地交通工具上。根据性能的需要&#xff0c;轮胎表面常会加工出不同形状的花纹。在设计轮胎时&#xff0c;往往要针对其使用环境&#xff0c;设计出相应的花纹形状。   第二阶段问…...

C#全新一代医院手术麻醉系统围术期全流程源码

目录 一、麻醉学科的起源 二、麻醉前访视与评估记录单 患者基本信息 临床诊断 患者重要器官功能及疾病情况 病人体格情况分级 手术麻醉风险评估 拟施麻醉方法及辅助措施 其他需要说明的情况 访视麻醉医师签名 访视时间 与麻醉相关的检查结果 三、手术麻醉信息系统…...

Python 神器:一键下载 M3U8 并转换为 MP4

在这个数字时代&#xff0c;我们经常在网页上遇到各种精彩的视频&#xff0c;但往往只能观看而无法下载。今天&#xff0c;我将向大家介绍如何使用 Python 自动下载网页中的 M3U8 链接&#xff0c;并将其转换为 MP4 格式&#xff0c;让你轻松保存喜欢的视频&#xff01; 一、准…...

vue3全局控制Element plus所有组件的文字大小

项目框架vue-右上角有控制全文的文字大小 实现&#xff1a; 只能控制element组件的文字及输入框等大小变化&#xff0c;如果是自行添加div,text, span之类的控制不了。 配置流程 APP.vue 使用element的provide&#xff0c;包含app <el-config-provider :locale"loca…...

区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测

区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测 目录 区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 BP神经网络(Backpropagation neural network)是一种常用的人工神…...

Matlab中的脚本和函数

Matlab中的脚本和函数 文章目录 Matlab中的脚本和函数脚本创建脚本代码注释函数创建函数局部函数嵌套函数私有函数匿名函数补充知识函数句柄测试环境:Win11 + Matlab R2021a 脚本 ​ Matlab脚本是最简单的程序文件类型。它们可用于自动执行一系列 Matlab 命令,如命令行重复执…...

使用 nohup java - jar 不输出nohup日志

使用 nohup 命令来运行 Java 程序&#xff0c;并且不让输出写入 nohup.out 文件&#xff0c;可以使用重定向操作符 > 将标准输出重定向到 /dev/null 文件中。这样可以将输出丢弃&#xff0c;而不会写入日志文件。下面是具体的命令&#xff1a; nohup java -jar your_progra…...

Linux系统中安装一些常用的插件备用

Linux系统中安装一些常用的插件备用 1.安装wget yum -y install wget 2.安装vim yum -y install vim-enhanced 3.更换yum源为国内的阿里云源&#xff08;选择&#xff09; 1、备份CentOS-Base.repo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.…...

笔记本电脑上部署LLaMA-2中文模型

尝试在macbook上部署LLaMA-2的中文模型的详细过程。 &#xff08;1&#xff09;环境准备 MacBook Pro(M2 Max/32G); VMware Fusion Player 版本 13.5.1 (23298085); Ubuntu 22.04.2 LTS; 给linux虚拟机分配8*core CPU 16G RAM。 我这里用的是16bit的量化模型&#xff0c;…...

百度云加速方法「Cheat Engine」

加速网盘下载 相信经常玩游戏的小伙伴都知道「Cheat Engine」这款游戏内存修改器&#xff0c;它除了能对游戏进行内存扫描、调试、反汇编 之外&#xff0c;还能像变速齿轮那样进行本地加速。 这款专注游戏的修改器&#xff0c;被大神发现竟然还能加速百度网盘资源下载&#xf…...

SOC内部集成网络MAC外设+ PHY网络芯片方案:PHY芯片基础知识

一. 简介 本文简单了解一下 "SOC内部集成网络MAC外设 PHY网络芯片方案" 这个网络硬件方案中涉及的 PHY网络芯片的基础知识。 二. PHY芯片基础知识 PHY 是 IEEE 802.3 规定的一个标准模块。 1. IEEE规定了PHY芯片的前 16个寄存器功能是一样的 前面说了&#xf…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...