mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-05-28 16:34:49 +08:00
Revert D13860038: [react-native][PR] Add ability to control scroll animation duration for Android
Differential Revision: D13860038 Original commit changeset: f06751d063a3 fbshipit-source-id: 5d89137aed0d549004e790068c1e4998ebccdaf1
This commit is contained in:
committed by
Facebook Github Bot
parent
c16fadb7c3
commit
4c69ccd0fb
@@ -116,14 +116,6 @@ export type State = {|
|
||||
becameResponderWhileAnimating: boolean,
|
||||
|};
|
||||
|
||||
/**
|
||||
* If a user has specified a duration, we will use it. Otherwise,
|
||||
* set it to -1 as the bridge cannot handle undefined / null values.
|
||||
*/
|
||||
function getDuration(duration?: number): number {
|
||||
return duration === undefined ? -1 : Math.max(duration, 0);
|
||||
}
|
||||
|
||||
const ScrollResponderMixin = {
|
||||
_subscriptionKeyboardWillShow: (null: ?EmitterSubscription),
|
||||
_subscriptionKeyboardWillHide: (null: ?EmitterSubscription),
|
||||
@@ -432,55 +424,46 @@ const ScrollResponderMixin = {
|
||||
* This is currently used to help focus child TextViews, but can also
|
||||
* be used to quickly scroll to any element we want to focus. Syntax:
|
||||
*
|
||||
* `scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true, duration: number = 0})`
|
||||
* `scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})`
|
||||
*
|
||||
* Note: The weird argument signature is due to the fact that, for historical reasons,
|
||||
* the function also accepts separate arguments as as alternative to the options object.
|
||||
* This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.
|
||||
*/
|
||||
scrollResponderScrollTo: function(
|
||||
x?:
|
||||
| number
|
||||
| {x?: number, y?: number, animated?: boolean, duration?: number},
|
||||
x?: number | {x?: number, y?: number, animated?: boolean},
|
||||
y?: number,
|
||||
animated?: boolean,
|
||||
duration?: number,
|
||||
) {
|
||||
if (typeof x === 'number') {
|
||||
console.warn(
|
||||
'`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.',
|
||||
);
|
||||
} else {
|
||||
({x, y, animated, duration} = x || {});
|
||||
({x, y, animated} = x || {});
|
||||
}
|
||||
UIManager.dispatchViewManagerCommand(
|
||||
nullthrows(this.scrollResponderGetScrollableNode()),
|
||||
UIManager.getViewManagerConfig('RCTScrollView').Commands.scrollTo,
|
||||
[x || 0, y || 0, animated !== false, getDuration(duration)],
|
||||
[x || 0, y || 0, animated !== false],
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Scrolls to the end of the ScrollView, either immediately or with a smooth
|
||||
* animation. For Android, you may specify a "duration" number instead of the
|
||||
* "animated" boolean.
|
||||
* animation.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* `scrollResponderScrollToEnd({animated: true})`
|
||||
* or for Android, you can do:
|
||||
* `scrollResponderScrollToEnd({duration: 500})`
|
||||
*/
|
||||
scrollResponderScrollToEnd: function(options?: {
|
||||
animated?: boolean,
|
||||
duration?: number,
|
||||
}) {
|
||||
scrollResponderScrollToEnd: function(options?: {animated?: boolean}) {
|
||||
// Default to true
|
||||
const animated = (options && options.animated) !== false;
|
||||
UIManager.dispatchViewManagerCommand(
|
||||
this.scrollResponderGetScrollableNode(),
|
||||
UIManager.getViewManagerConfig('RCTScrollView').Commands.scrollToEnd,
|
||||
[animated, getDuration(options && options.duration)],
|
||||
[animated],
|
||||
);
|
||||
},
|
||||
|
||||
|
||||
@@ -695,29 +695,20 @@ class ScrollView extends React.Component<Props, State> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Scrolls to a given x, y offset, either immediately, with a smooth animation, or,
|
||||
* for Android only, a custom animation duration time.
|
||||
* Scrolls to a given x, y offset, either immediately or with a smooth animation.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* `scrollTo({x: 0, y: 0, animated: true})`
|
||||
*
|
||||
* Example with duration (Android only):
|
||||
*
|
||||
* `scrollTo({x: 0, y: 0, duration: 500})`
|
||||
*
|
||||
* Note: The weird function signature is due to the fact that, for historical reasons,
|
||||
* the function also accepts separate arguments as an alternative to the options object.
|
||||
* This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.
|
||||
*
|
||||
*/
|
||||
scrollTo(
|
||||
y?:
|
||||
| number
|
||||
| {x?: number, y?: number, animated?: boolean, duration?: number},
|
||||
y?: number | {x?: number, y?: number, animated?: boolean},
|
||||
x?: number,
|
||||
animated?: boolean,
|
||||
duration?: number,
|
||||
) {
|
||||
if (typeof y === 'number') {
|
||||
console.warn(
|
||||
@@ -725,13 +716,12 @@ class ScrollView extends React.Component<Props, State> {
|
||||
'animated: true})` instead.',
|
||||
);
|
||||
} else {
|
||||
({x, y, animated, duration} = y || {});
|
||||
({x, y, animated} = y || {});
|
||||
}
|
||||
this._scrollResponder.scrollResponderScrollTo({
|
||||
x: x || 0,
|
||||
y: y || 0,
|
||||
animated: animated !== false,
|
||||
duration: duration,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -741,16 +731,13 @@ class ScrollView extends React.Component<Props, State> {
|
||||
*
|
||||
* Use `scrollToEnd({animated: true})` for smooth animated scrolling,
|
||||
* `scrollToEnd({animated: false})` for immediate scrolling.
|
||||
* For Android, you may specify a duration, e.g. `scrollToEnd({duration: 500})`
|
||||
* for a controlled duration scroll.
|
||||
* If no options are passed, `animated` defaults to true.
|
||||
*/
|
||||
scrollToEnd(options?: {animated?: boolean, duration?: number}) {
|
||||
scrollToEnd(options?: {animated?: boolean}) {
|
||||
// Default to true
|
||||
const animated = (options && options.animated) !== false;
|
||||
this._scrollResponder.scrollResponderScrollToEnd({
|
||||
animated: animated,
|
||||
duration: options && options.duration,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user