     /// When there is no more data, is it necessary to keep the height of the custom view? If it is false, it will not be displayed.
     var isVisibleNoMore: Bool { get }
     
+    /// @optional, default is true.
+    /// Whether to send a request only once per drag. If it is false, it will be called continuously when the offset changes.
+    var isOnlyRefreshPerDrag: Bool { get }
+    
     /// @optional, default is .zero.
     /// -top: increase the distance from scrollview.
     /// -left and right: set the horizontal offset.

            return
        }
        
        if loadMoreState == .initial {
            if previous.offset != newState.offset {
                if fraction - (custom?.preload ?? 0) <= 0 && scrollView.dataCount > 0 {
                    loadMoreState = .refreshing
                }

            }
        }
    }
    
    private var oneNewPan: Bool = false
    
    // MARK: Helper Properties
    
