javascript - 组件忘记拖动的起点
问题描述
当我遇到一些问题时,我在我的一个宠物项目中使用animejs和react-draggable 。我有一个沿 Y 轴平移子组件的动画。每当我单击按钮时都会触发此动画。第一次单击时,组件会向下移动任意图形。在第二次单击时,组件的 TOP 应该与其父级的内联。
子组件
import React, { useRef, useState } from 'react'
import animate from 'animejs'
import Draggable from 'react-draggable'
import utils from '../utils/index'
import ControlPanel from './player/controls/controlPanel'
import SongInfo from './player/song/songInfo'
import Header from './player//header/header'
import Footer from './player/footer/footer'
import ProgressBar from './player/progress/progressBar'
function Player({ getSpotifyPosition }) {
const [active, setActive] = useState(true)
const [color, setColor] = useState('#d4d4d4')
const [top, setTop] = useState(0)
const playerRef = useRef()
const getPlayerPosition = utils.getCoordinates.bind(playerRef)
const minimizePlayer = () => {
setActive(!active)
let {y: spot_y, height: spot_height} = getSpotifyPosition()
let {y: play_y, height: play_height} = getPlayerPosition()
let options = {
targets: playerRef.current,
easing: 'linear',
duration: 350,
translateY: active ? (700 - (play_y - spot_y)) : 0
}
animate(options)
}
return (
<Draggable axis='y' bounds={{ top: 0 }}>
<div style={{ height: '100%' }}>
<div
className='player'
ref={playerRef}
style={{ backgroundColor: color }}
>
<Header minimizePlayer={minimizePlayer} />
<SongInfo setColor={setColor} />
<ProgressBar />
<ControlPanel />
<Footer />
</div>
</div>
</Draggable>
)
}
export default Player
这一切都有效。问题是每当我在触发第一个动画之前拖动子组件时,该组件似乎忘记了如何在第二个动画上回到其父组件的顶部。我想我一定遗漏了一些非常重要且非常明显的东西。如何让子组件显示我想要的行为?任何帮助,将不胜感激。先感谢您。
解决方案
推荐阅读
- scala - Scala 2.13 用什么代替 MutableList?
- sublimetext3 - 如何在 Sublime Text 项目中查看包含路径文件
- google-api - 如何使用 Google apiKey 在 node.js 中访问 google drive 和 google sheet
- docker - Docker 容器中的新 DotNet Core VSTS 代理
- installation - Windows 无人值守安装 - 以特定用户身份运行脚本
- javascript - 检查是否选择了一个选项并编辑 HTML 标记
- acumatica - 如何在自定义项目浏览器中引用 .dll 文件
- regex - 使用正则表达式以正确的方式将 Youtube 频道主页重定向到视频部分
- amazon-web-services - 从 dynamodb 获取具有给定值的特定对象
- azure - 我们如何在本地机器和 Azure VM 之间同步代码?