Example #1
0
        public static float GetHorizotalNormalizedPositionAt(this ScrollRect scrollRect, RectTransform target)
        {
            RectTransform view = scrollRect.viewport != null ? scrollRect.viewport : scrollRect.GetComponent <RectTransform>();

            Rect   viewRect      = view.rect;
            Bounds elementBounds = target.TransformBoundsTo(view);
            float  offset        = viewRect.center.x - elementBounds.center.x;

            float scrollPos = scrollRect.horizontalNormalizedPosition - scrollRect.NormalizeScrollDistance(0, offset);

            return(Mathf.Clamp(scrollPos, 0f, 1f));
        }
    public static float GetTargetScrollValue(this ScrollRect scrollRect, RectTransform target)
    {
        var view = scrollRect.viewport != null ? scrollRect.viewport : scrollRect.GetComponent <RectTransform>();

        var viewRect      = view.rect;
        var elementBounds = target.TransformBoundsTo(view);
        var offset        = viewRect.center.y - elementBounds.center.y;

        var scrollPos = scrollRect.verticalNormalizedPosition - scrollRect.NormalizeScrollDistance(1, offset);

        return(Mathf.Clamp(scrollPos, 0f, 1f));
    }
Example #3
0
        /// <summary>
        /// Scroll the target element to the vertical center of the scroll rect's viewport.
        /// Assumes the target element is part of the scroll rect's contents.
        /// </summary>
        /// <param name="scrollRect">Scroll rect to scroll</param>
        /// <param name="target">Element of the scroll rect's content to center vertically</param>
        public static void ScrollToCeneter(this ScrollRect scrollRect, RectTransform target)
        {
            // The scroll rect's view's space is used to calculate scroll position
            var view = scrollRect.viewport != null ? scrollRect.viewport : scrollRect.GetComponent <RectTransform>();

            // Calcualte the scroll offset in the view's space
            var viewRect      = view.rect;
            var elementBounds = target.TransformBoundsTo(view);
            var offset        = viewRect.center.y - elementBounds.center.y;

            // Normalize and apply the calculated offset
            var scrollPos = scrollRect.verticalNormalizedPosition - scrollRect.NormalizeScrollDistance(1, offset);

            scrollRect.verticalNormalizedPosition = Mathf.Clamp(scrollPos, 0f, 1f);
        }