react-native - 反应原生手势处理程序 - 多次调整拖动时元素跳跃
问题描述
我为我的项目构建滑块,滑块工作正常,但每次我调整拖动(使用 Circle 元素)时,圆圈都会跳到他的初始状态let translateX = sub(x, 50 / 2);
请帮助我了解我需要添加什么才能使圆圈从他的最后一个位置继续。
我试图在 onDrop 函数中覆盖 translateX 但它不起作用 ->
() =>
cond(
eq(state, State.ACTIVE),
call([translateX], ([v]) => {
onDrop(v);
}),
),
[state, value],
);
const onDrop = (e) => {
const diff = e - -firstNumber;
const lastOption = diff * offSet;
setTextValue((lastOption / 10).toFixed(2));
};
我的代码:
const width = Dimensions.get('window').width
const SLIDER_WIDTH = width - 200;
let offSet = 1000 / SLIDER_WIDTH;
let firstNumber = SLIDER_WIDTH - 25;
const [state, translationX] = useValues(
State.UNDETERMINED,
(-SLIDER_WIDTH + 100) / 2,
);
const gestureHandler = onGestureEvent({state, translationX});
const x = diffClamp(withOffset(translationX, state), -SLIDER_WIDTH + 50, 50);
let translateX = sub(x, 50 / 2);
const [textValue, setTextValue] = useState(50);
const value = round(multiply(divide(x, SLIDER_WIDTH), 100));
useCode(
() =>
cond(
eq(state, State.ACTIVE),
call([translateX], ([v]) => {
onDrop(v);
}),
),
[state, value],
);
const onDrop = (e) => {
const diff = e - -firstNumber;
const lastOption = diff * offSet;
setTextValue((lastOption / 10).toFixed(2));
};
return (
<View>
<PanGestureHandler
minDist={0}
{...gestureHandler}
onHandlerStateChange={chosenValue}>
<Animated.View
style={{
position: 'absolute',
top: 0,
left: 0,
width: CIRCLE_SIZE,
height: CIRCLE_SIZE,
transform: [{translateX}],
}}>
<Animated.View
style={{
...StyleSheet.absoluteFillObject,
}}>
<Circle {...{state}} />
</Animated.View>
</Animated.View>
</PanGestureHandler>
</View>
);
提前致谢。
解决方案
推荐阅读
- c++ - 如何将类型与数字关联
- python - 验证字符串
- python-3.x - 根据另一个模块是否存在,为一个模块使用多个别名
- r - 在 R 中查找具有条件限制的时间戳的滚动计数
- python - python多处理产量量子
- spring-boot - Spring security 5 测试 @WebMvcTest 测试不断给出 0302 响应
- ruby-on-rails - Activeadmin 未初始化常量 Superadmin::DashboardController
- typescript - 基于记录或类似的从 Typescript 类型定义中省略属性
- php - 如何使用 mysql/laravel 处理不同部分的信息
- php - Wordpress如何在相关帖子的循环中间插入一个div标签