using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class ScrollTest : MonoBehaviour,IBeginDragHandler,IEndDragHandler {
//滚动内容
public RectTransform content;
//填充类容单元
public GameObject image;
//滚动脚本
public ScrollRect rect;
//总共的单元个数
public int AllItemNum;
//一页放多少个单元
public int PageItemNum;
//总页数
private int PageNum;
//一页的长度
private float peerPageLength;
public float targer = 0;
public bool isDrag = false;
// Use this for initialization
void Awake() {
for (int i = 0; i < AllItemNum; i++)
{
GameObject go = Instantiate(image);
go.transform.parent = content;
}
GridLayoutGroup g = content.GetComponent<GridLayoutGroup>();
//计算滚动内容的总水平长度,然后设置
float itemLength = g.cellSize.x + g.spacing.x;
int PageRowNum = PageItemNum / g.constraintCount;
float pageLength = itemLength * PageRowNum;
PageNum = Mathf.CeilToInt( AllItemNum / PageItemNum) + 1;
content.sizeDelta = new Vector2(pageLength * PageNum,content.sizeDelta.y);
//计算一页的长度,19个,8个每页,共3页,就是0,0.5,13段
peerPageLength = 1f / (PageNum - 1);
}
// Update is called once per frame
void Update () {
if (isDrag) return;
rect.horizontalNormalizedPosition = Mathf.Lerp(rect.horizontalNormalizedPosition, targer, Time.deltaTime * 30);
}
public void OnBeginDrag(PointerEventData eventData)
{
isDrag = true;
}
public void OnEndDrag(PointerEventData eventData)
{
isDrag = false;
if (eventData.delta.x > 0f || targer < rect.horizontalNormalizedPosition)
targer += peerPageLength;
else {
targer -= peerPageLength;
}
targer = Mathf.Clamp01(targer);
}
}