使用ScrollRect制作翻页
1.标准的层级结构 ScrollRect->ViewPort->Content,Viewport负责显示区域的大小一般和Mask一起配合使用,Content使用Layout来布局,如果想使用代码来自动定位显示位置需要在Content加上Content size filter.
2.ScrollRectHelper
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections.Generic;
using System; public class ScrollRectHelper : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{
// 滑动速度
public float smooting = ; // 每页显示的项目
[SerializeField]
private int countPerPage = ; ScrollRect srect;
// 总页数
float totalPages;
// 是否拖拽结束
bool isDrag = false;
// 总页数索引比列 0-1
List<float> listPageValue = new List<float> { };
// 滑动的目标位置
public float targetPos = ;
// 当前位置索引
float nowindex = ; void Awake()
{
srect = GetComponent<ScrollRect>();
} public string PageText()
{
return (nowindex + ) + "/" + (totalPages + );
} // 计算每页比例
public void CalcListPageValue<T>() where T : MonoBehaviour
{
T[] items = srect.content.GetComponentsInChildren<T>();
srect.content.rect.Set(srect.content.rect.width / , srect.content.rect.y, srect.content.rect.width, srect.content.rect.height);
totalPages = (int)(Math.Ceiling((float)items.Length / countPerPage) - );
if (items.Length != )
{
for (float i = ; i <= totalPages; i++)
{
//Debug.Log(i / totalPages);
listPageValue.Add((i / totalPages));
}
}
} void Update()
{
if (!isDrag)
{
srect.horizontalNormalizedPosition = Mathf.Lerp(srect.horizontalNormalizedPosition, targetPos,
Time.deltaTime * smooting);
} // Debug
if (Input.GetKeyDown(KeyCode.LeftArrow)) PressLeft();
if (Input.GetKeyDown(KeyCode.RightArrow)) PressRight();
} /// <summary>
/// 拖动开始
/// </summary>
/// <param name="eventData"></param>
public void OnBeginDrag(PointerEventData eventData)
{
isDrag = true;
} /// <summary>
/// 拖拽结束
/// </summary>
/// <param name="eventData"></param>
public void OnEndDrag(PointerEventData eventData)
{
isDrag = false;
var tempPos = srect.horizontalNormalizedPosition; //获取拖动的值
var index = ;
float offset = Mathf.Abs(listPageValue[index] - tempPos); //拖动的绝对值
for (int i = ; i < listPageValue.Count; i++)
{
float temp = Mathf.Abs(tempPos - listPageValue[i]);
if (temp < offset)
{
index = i;
offset = temp;
}
}
targetPos = listPageValue[index];
nowindex = index;
} public void PressLeft()
{
nowindex = Mathf.Clamp(nowindex - , , totalPages);
targetPos = listPageValue[Convert.ToInt32(nowindex)];
} public void PressRight()
{
nowindex = Mathf.Clamp(nowindex + , , totalPages);
targetPos = listPageValue[Convert.ToInt32(nowindex)];
}
}
使用ScrollRect制作翻页的更多相关文章
- unity 基于scrollRect实现翻页显示
unity 基于scrollRect实现翻页显示,并定为到某一页,而不是某一页的中间方法(第二个脚本采用实际位置计算,并在update里实现平滑过渡): 组场景时,经常需要获取鼠标(或者点击)开始结束 ...
- css 制作翻页布局
代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- [Qt] CFlip 翻页功能实现
由于需要给table制作翻页功能,所以写了一个翻页的类. 看上去总体效果感觉还是不错的,哈哈. //flip.h #ifndef CFLIP_H #define CFLIP_H #include &l ...
- 简单3D翻页相册制作教程
3D效果看起来总是要比平面的图形看起来视觉效果要好的多,今天来教大家制作简单的3D翻页效果的视频. 视频预览链接:https://v.youku.com/v_show/id_XMzgxOTY5NzQz ...
- Android电子书翻页效果实现
这篇文章是在参考了别人的博客基础上,修改了其中一个翻页bug,并且加了详细注释 先看效果 其中使用了贝赛尔曲线原理,关于贝赛尔曲线的知识,推荐大家看下http://blog.csdn.net/hmg2 ...
- HTML5开发的翻页效果实例
简介2010年F-i.com和Google Chrome团队合力致力于主题为<20 Things I Learned about Browsers and the Web>(www.20t ...
- ios 视图切换翻页效果
本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...
- Laya List翻页滚动方案 & List滚动源码解析
Laya List翻页滚动方案 & List滚动源码解析 @author ixenos 2019-03-29 1.List翻页滚动方案 /** * 计算下一页的起始索引, 不足时补足 * @p ...
- 简易数据分析 10 | Web Scraper 翻页——抓取「滚动加载」类型网页
这是简易数据分析系列的第 10 篇文章. 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到屏 ...
随机推荐
- PHPJN0001:phpmyadmin 允许密码为空 设置
phpmyadmin连接mysql数据库,出于安全考虑,默认不允许使用空密码连接数据库.因为数据库一般都设置密码访问. 但如果只是本机环境测试使用,每隔一段时间都需要填写密码,不是很方便. 如果没有修 ...
- 浅谈background的用法
div css 背景样式background属性 一.语法及参数 1.语法:background : background-color(颜色) || background-image(图片地址) || ...
- 数据分析----天气预报走向(pygal)
#!usr/bin/env python #-*- coding:utf-8 _*- """ @author:Administrator @file: 可视化天气预报.p ...
- Linux下的python3,virtualenv,Mysql、nginx、redis等常用服务安装配置
Linux下的python3,virtualenv,Mysql.nginx.redis等常用服务安装配置 学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环 ...
- Sikerio --《只狼》
“狼啊,替我断绝不死吧”
- [译]C# 7系列,Part 10: Span<T> and universal memory management Span<T>和统一内存管理
原文:https://blogs.msdn.microsoft.com/mazhou/2018/03/25/c-7-series-part-10-spant-and-universal-memory- ...
- 怎么利用 ChromeDriver 和 Selenium对 CEF应用进行自动化测试-java实现
Overview ChromeDriver and Selenium are tools for automated testing of Chromium-based applications. T ...
- drf 接口文档
coreapi 参考点击 swagger风格接口文档 参考 参考用例 swagger 使用参考
- ssrf漏洞利用(内网探测、打redis)
摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http.file.gopher.dict协议. file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描.端口探测,如果探测到637 ...
- kali的virtualbox镜像账号密码
下载最新版本kali的virtualbox镜像 默认账号密码 root 密码 toor