For AI agents: the complete documentation index is available at /next/llms.txt, the full documentation bundle is available at /next/llms-full.txt, and this page is available as Markdown at /next/api/elements/built-in/scroll-view.md.
Lynx
  • English
  • <scroll-view>

    Basic scrolling component supporting both horizontal and vertical scrolling. When its content area is larger than its visible area, it allows users to scroll to reveal more content.

    Usage

    Horizontal and Vertical Scrolling

    <scroll-view> supports both horizontal and vertical scrolling, implemented through the scroll-orientation properties. <scroll-view> always uses the linear layout, and the layout direction is determined by the scroll-orientation attributes.

    Scroll Events

    Use event callbacks such as bindscroll, bindscrolltoupper, and bindscrolltolower to monitor changes in scroll progress.

    Sticky Capability

    As a child node of <scroll-view>, you can set the sticky attribute making the child node remain at a certain distance from the top of the <scroll-view> and not continue scrolling with the content.

    Tip

    sticky can only be set for direct child nodes of <scroll-view>. On

    Android, you need to add the flatten={false} attribute to sticky nodes.

    The direct child nodes of <scroll-view> only support linear and sticky. If you need more complex layouts, such as child nodes adapting to expand, it is recommended to provide a single child view to the <scroll-view> and implement more robust CSS capabilities within that single child node.

    <scroll-view> scroll-y>
      <view> // do anything you want
      {...}
      </view>
    </scroll-view>

    Attributes

    bounces

    iOS
    Desktop
    Harmony
    1.4
    // @defaultValue: true
    bounces?: boolean;

    Enable bounce effect

    enable-scroll

    Android
    iOS
    Desktop
    Harmony
    1.4
    // @defaultValue: true
    'enable-scroll'?: boolean;

    Enable dragging

    initial-scroll-offset

    Android
    iOS
    Desktop
    Harmony
    2.17
    // @defaultValue: 0
    'initial-scroll-offset'?: number;

    Initial scroll position, only effective once, in PX

    initial-scroll-to-index

    Android
    iOS
    Desktop
    Harmony
    2.17
    // @defaultValue: 0
    'initial-scroll-to-index'?: number;

    Scroll to specified child node on first screen, only effective once. All direct child nodes must be flatten=false.

    lower-threshold

    Android
    iOS
    Desktop
    Harmony
    1.4
    // @defaultValue: 0
    'lower-threshold'?: number;

    Set upper threshold to bindscrolltoupper event.

    scroll-bar-enable

    iOS
    Desktop
    Harmony
    1.4
    // @defaultValue: true
    'scroll-bar-enable'?: boolean;

    Enable scrollbar

    scroll-orientation

    Android
    iOS
    Desktop
    Harmony
    3.0
    // @defaultValue: 'vertical'
    'scroll-orientation'?: 'vertical' | 'horizontal';

    Replacement of scroll-x and scroll-y

    upper-threshold

    Android
    iOS
    Desktop
    Harmony
    1.4
    // @defaultValue: 0
    'upper-threshold'?: number;

    Set upper threshold to bindscrolltoupper event.

    Events

    Frontend can bind corresponding event callbacks to listen for runtime behaviors of the element, as shown below.

    bindcontentsizechanged

    Android
    iOS
    Harmony
    1.6
    bindcontentsizechanged = (e: ContentSizeChangedEvent) => {};

    This event is triggered when the scrollview's content size changed.

    bindscroll

    Android
    iOS
    Desktop
    Harmony
    1.4
    bindscroll = (e: ScrollEvent) => {};

    This event is triggered when the scrollview is scrolling.

    bindscrollend

    Android
    iOS
    Desktop
    Harmony
    1.6
    bindscrollend = (e: ScrollEndEvent) => {};

    This event is triggered when the scrollview's scroll ended.

    bindscrolltolower

    Android
    iOS
    Harmony
    1.4
    bindscrolltolower = (e: ScrollToLowerEvent) => {};

    This event is triggered when the lower/right edge of the scrolling area intersects with the visible area defined by the lowerThreshold.

    bindscrolltoupper

    Android
    iOS
    Harmony
    1.4
    bindscrolltoupper = (e: ScrollToUpperEvent) => {};

    This event is triggered when the upper/left edge of the scrolling area intersects with the visible area defined by the upperThreshold.

    Methods

    Frontend can invoke component methods via the SelectorQuery API.

    autoScroll

    Android
    iOS
    Desktop
    Harmony
    
    lynx.createSelectorQuery()
         .select('#id')
         .invoke({
          method: 'autoScroll',
          params: {
            /**
             * The distance of each second's scrolling, which supports positive and negative values. The unit of distance can be "px", "rpx", "ppx", or null (for iOS, the value must be greater than 1/screen.scale px).
             * @Android
             * @iOS
             * @Harmony
             * @PC
             */
            rate: number;
            /**
             * Start/stop automatic scrolling.
             * @Android
             * @iOS
             * @Harmony
             * @PC
             */
            start: boolean;
          };
          success: function (res) {},
          fail: function (res) {},
        })
        .exec();
    

    Automatic scrolling

    getScrollInfo

    Android
    iOS
    Desktop
    Harmony
    
    lynx.createSelectorQuery()
         .select('#id')
         .invoke({
          method: 'getScrollInfo',
          success: Callback<{
            /**
             * Total scrollable range along orientation, in PX
             * @Android
             * @iOS
             * @Harmony
             * @PC
             */
            scrollRange: number;
            /**
             * Content offset on X-axis, in PX
             * @Android
             * @iOS
             * @Harmony
             * @PC
             */
            scrollX: number;
            /**
             * Content offset on Y-axis, in PX
             * @Android
             * @iOS
             * @Harmony
             * @PC
             */
            scrollY: number;
          }>;
          fail: function (res) {},
        })
        .exec();
    

    Get scroll info

    scrollBy

    Android
    iOS
    Desktop
    Harmony
    
    lynx.createSelectorQuery()
         .select('#id')
         .invoke({
          method: 'scrollBy',
          params: {
            /**
             * Offset to scroll
             */
            offset?: number;
          };
          success: function (res) {},
          fail: function (res) {},
        })
        .exec();
    

    Scroll by specified offset

    scrollTo

    Android
    iOS
    Desktop
    Harmony
    
    lynx.createSelectorQuery()
         .select('#id')
         .invoke({
          method: 'scrollTo',
          params: {
            /**
             * Target item index
             * @defaultValue 0
             */
            index?: number;
            /**
             * Offset relative to target node
             */
            offset?: number;
            /**
             * Enable scroll animation
             */
            smooth?: boolean;
          };
          success: function (res) {},
          fail: function (res) {},
        })
        .exec();
    

    Scroll to specified position

    Performance Optimization Suggestions

    <scroll-view> creates all of its child nodes at once, potentially causing severe first-screen load times. Use exposure events to drive it to create only visible child nodes.

    <scroll-view> lacks any reuse mechanism. If content is too extensive, it may consume an exceptionally large amount of memory, possibly causing OOM and other stability problems.

    For data exceeding three screens, use <list> to optimize performance, or simulate <VisualizedList> logic based on exposure events.

    Compatibility

    LCD tables only load in the browser

    Except as otherwise noted, this work is licensed under a Creative Commons Attribution 4.0 International License, and code samples are licensed under the Apache License 2.0.