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制作翻页的更多相关文章

  1. unity 基于scrollRect实现翻页显示

    unity 基于scrollRect实现翻页显示,并定为到某一页,而不是某一页的中间方法(第二个脚本采用实际位置计算,并在update里实现平滑过渡): 组场景时,经常需要获取鼠标(或者点击)开始结束 ...

  2. css 制作翻页布局

    代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  3. [Qt] CFlip 翻页功能实现

    由于需要给table制作翻页功能,所以写了一个翻页的类. 看上去总体效果感觉还是不错的,哈哈. //flip.h #ifndef CFLIP_H #define CFLIP_H #include &l ...

  4. 简单3D翻页相册制作教程

    3D效果看起来总是要比平面的图形看起来视觉效果要好的多,今天来教大家制作简单的3D翻页效果的视频. 视频预览链接:https://v.youku.com/v_show/id_XMzgxOTY5NzQz ...

  5. Android电子书翻页效果实现

    这篇文章是在参考了别人的博客基础上,修改了其中一个翻页bug,并且加了详细注释 先看效果 其中使用了贝赛尔曲线原理,关于贝赛尔曲线的知识,推荐大家看下http://blog.csdn.net/hmg2 ...

  6. HTML5开发的翻页效果实例

    简介2010年F-i.com和Google Chrome团队合力致力于主题为<20 Things I Learned about Browsers and the Web>(www.20t ...

  7. ios 视图切换翻页效果

    本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar  Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...

  8. Laya List翻页滚动方案 & List滚动源码解析

    Laya List翻页滚动方案 & List滚动源码解析 @author ixenos 2019-03-29 1.List翻页滚动方案 /** * 计算下一页的起始索引, 不足时补足 * @p ...

  9. 简易数据分析 10 | Web Scraper 翻页——抓取「滚动加载」类型网页

    这是简易数据分析系列的第 10 篇文章. 友情提示:这一篇文章的内容较多,信息量比较大,希望大家学习的时候多看几遍. 我们在刷朋友圈刷微博的时候,总会强调一个『刷』字,因为看动态的时候,当把内容拉到屏 ...

随机推荐

  1. PHPJN0001:phpmyadmin 允许密码为空 设置

    phpmyadmin连接mysql数据库,出于安全考虑,默认不允许使用空密码连接数据库.因为数据库一般都设置密码访问. 但如果只是本机环境测试使用,每隔一段时间都需要填写密码,不是很方便. 如果没有修 ...

  2. 浅谈background的用法

    div css 背景样式background属性 一.语法及参数 1.语法:background : background-color(颜色) || background-image(图片地址) || ...

  3. 数据分析----天气预报走向(pygal)

    #!usr/bin/env python #-*- coding:utf-8 _*- """ @author:Administrator @file: 可视化天气预报.p ...

  4. Linux下的python3,virtualenv,Mysql、nginx、redis等常用服务安装配置

    Linux下的python3,virtualenv,Mysql.nginx.redis等常用服务安装配置   学了前面的Linux基础,想必童鞋们是不是更感兴趣了?接下来就学习常用服务部署吧! 安装环 ...

  5. Sikerio --《只狼》

    “狼啊,替我断绝不死吧”

  6. [译]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- ...

  7. 怎么利用 ChromeDriver 和 Selenium对 CEF应用进行自动化测试-java实现

    Overview ChromeDriver and Selenium are tools for automated testing of Chromium-based applications. T ...

  8. drf 接口文档

    coreapi 参考点击 swagger风格接口文档 参考 参考用例 swagger 使用参考

  9. ssrf漏洞利用(内网探测、打redis)

    摘要:存在ssrf漏洞的站点主要利用四个协议,分别是http.file.gopher.dict协议. file协议拿来进行本地文件的读取,http协议拿来进行内网的ip扫描.端口探测,如果探测到637 ...

  10. kali的virtualbox镜像账号密码

    下载最新版本kali的virtualbox镜像 默认账号密码 root  密码 toor