PlayerContents.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import React, { useState, useContext } from 'react';
  2. import { ScrollView, Text, StyleSheet } from 'react-native';
  3. import { Icon, Slider } from 'react-native-elements';
  4. import C from 'rn-class';
  5. import {PlayerStateContext, PlayerDispatchContext, playerCommon} from './PlayerReducer';
  6. export default props => {
  7. const { Pages, currentPlayerValue, setCurrentPlayerValue} = props;
  8. const [curPlayerValue, setCurPlayerValue] = useState(0);
  9. const [isPlay, setPlay] = useState(false);
  10. const playerDispatch = useContext(PlayerDispatchContext);
  11. const playerState = useContext(PlayerStateContext);
  12. const {paused, player, duration, currentTime} = playerState;
  13. const { secondsTohhmmss } = playerCommon;
  14. const onSetPlay = () => {
  15. //setPlay(!isPlay);
  16. playerDispatch({type:'paused', setPaused:!paused});
  17. //console.log(player);
  18. };
  19. const onStop = () => {
  20. playerDispatch({type:'stop'});
  21. }
  22. // const getpercent = () => {
  23. // console.log((parseFloat(currentTime) / parseFloat(duration))*100-1)
  24. // if(currentTime>0) {
  25. // return (parseFloat(currentTime) / parseFloat(duration))*100
  26. // }
  27. // }
  28. const onForwardRewind = (type) => {
  29. if(type==='rewind') {
  30. playerDispatch({type: 'seek', seekValue: currentTime - 15})
  31. }
  32. if(type==='forward') {
  33. playerDispatch({type: 'seek', seekValue: currentTime + 15})
  34. }
  35. }
  36. return (
  37. <ScrollView>
  38. <C.Text cls="flx1 ta-c">{Pages.subtitle}</C.Text>
  39. <C.View cls="flx2 ph5 mt5">
  40. <C.Text cls="fw-b">{Pages.subtitle}</C.Text>
  41. <C.Text cls="mt2" numberOfLines={10}>
  42. {Pages.contens}
  43. </C.Text>
  44. <C.Text cls="mt3" numberOfLines={1}>
  45. by {Pages.subtitle.replace(/\r\n|\n|\r/gm, ' ')}
  46. </C.Text>
  47. <C.Text cls="mt5 as-e" numberOfLines={1}>
  48. March 19
  49. </C.Text>
  50. </C.View>
  51. <C.View cls="flx1 flx-row jc-sa ai-c mt5">
  52. <C.EL.Icon {...C.n2cls('size8')} type="ionicon" name="md-rewind" onPress={()=>{onForwardRewind('rewind')}} />
  53. { paused===false
  54. ?<C.EL.Icon {...C.n2cls('size10')} type="ionicon" name="md-pause" onPress={onSetPlay} />
  55. :<C.EL.Icon {...C.n2cls('size10')} type="ionicon" name="md-play" onPress={onSetPlay} />
  56. }
  57. <C.EL.Icon {...C.n2cls('size8')} type="ionicon" name="md-fastforward" onPress={()=>{onForwardRewind('forward')}} />
  58. <C.EL.Icon {...C.n2cls('size10')} type="ionicon" name="md-square" onPress={onStop}/>
  59. </C.View>
  60. <C.View cls="flx1 ai-c mt2">
  61. {/* <C.Text cls="as-s" style={{ ...StyleSheet.absoluteFill, backgroundColor:'red', width:50, textAlign:'center', left:`${getpercent()-5}%`}}> {Math.floor(currentTime)}</C.Text> */}
  62. <Slider
  63. style={{ width: '95%' }}
  64. trackStyle={{height:4}}
  65. thumbTintColor="#333"
  66. thumbStyle={{ width: 15, height: 10 }}
  67. maximumValue={duration}
  68. value={currentTime}
  69. onValueChange={value => playerDispatch({type: 'seek', seekValue: Math.floor(value)})}
  70. />
  71. <C.View cls="w95 jc-sb flx-row">
  72. <C.Text>{secondsTohhmmss(currentTime)}</C.Text>
  73. <C.Text>{secondsTohhmmss(duration)}</C.Text>
  74. </C.View>
  75. </C.View>
  76. <C.View cls="h50" />
  77. </ScrollView>
  78. );
  79. };