【问题标题】:Changing CSS styles when an event fires事件触发时更改 CSS 样式
【发布时间】:2020-08-21 18:26:06
【问题描述】:

我正在尝试将THEOPlayer 集成到我的项目中,并且我想根据某些事件自定义样式。例如,我想在视频暂停时隐藏工具栏并显示叠加图像。 他们确实公开了一些我可以手动更改的 CSS 类,但我的问题是,如何在特定事件中更改 CSS 中的值。由于播放器是作为单个 JSX 元素导入的,因此我不知道如何将自定义类添加到其特定部分。所以我想知道是否有其他方法。

这是一个创建 Player 实例的组件:

class Player extends React.Component {
  _player = null;
  _el = React.createRef();

  componentDidMount() {
    const { source, onPlay, onPause } = this.props;

    if (this._el.current) {
      this._player = new window.THEOplayer.Player(this._el.current, {
        libraryLocation:
          "https://cdn.myth.theoplayer.com/7aff3fa6-f92e-45f9-a40e-1bce9911b073/",
      });

      this._player.source = source;
      this._player.addEventListener("play", onPlay);
      this._player.addEventListener("pause", onPause);
    }
  }

  componentWillUnmount() {
    if (this._player) {
      this._player.destroy();
    }
  }

  render() {
    return (
      <div
        className={
          "theoplayer-container video-js theoplayer-skin vjs-16-9 THEOplayer"
        }
        ref={this._el}
      >
      </div>
    );
  }
}

export default Player;

这是我想要更改样式 onPlayonPause 的代码的一部分

      <div className={"player-container"}>
        <Player
          source={source}
          onPlay={() => {
            console.log("playing");
          }}
          onPause={() => {
            console.log("paused");
          }}
        />
      </div>

【问题讨论】:

    标签: css reactjs sass


    【解决方案1】:

    这样使用

    state = {
      play: false,
      pause: true,
    }
    const playFn = () => {
      this.setState = ({
        play: true,
        pause: false,
      })
    }
    const pauseFn = () => {
      this.setState = ({
        play: false,
        pause: true,
      })
    }
     <div className={"player-container"}>
            <Player
              source={source}
              onPlay={playFn}
              onPause={pauseFn}
              activatePlayClasses={play}
              activatePauseClasses={pause}
              bg={'https://example/example.jpg'}
            />
    </div>
    
    // on Player component
    const { source, onPlay, onPause, activatePauseClasses, activatePlayClasses , bg} = this.props;
    
    
    render() {
        return (
          <div
            className={
              `theoplayer-container video-js theoplayer-skin vjs-16-9 THEOplayer 
               ${activatePauseClasses ? 'your pause class' : ''}
               ${activatePlayClasses ? 'your play class' : ''}`
            }
            style={{backgroundImage: `url(${bg})`}}
            ref={this._el}
          >
          </div>
        );
      }
    
    

    我已经更新了代码

    【讨论】:

    • 好的。我明白了,我正在努力解决的是我需要定位未在 React 代码中公开的类。例如,如果我想在播放器暂停时为其设置背景图片,我需要在我的 CSS 文件中定位 .theoplayer-skin.vjs-paused .theo-player-wrapper:before 类。问题是,如果我想从props 动态设置背景图片,如何将 url 传递给 CSS 文件,或者如果这不可能,其他选项是什么?
    • 在这种情况下,它会将背景图像添加到 theoplayer-container video-js theoplayer-skin vjs-16-9 THEOplayer' 类。我需要将那张图片附加到 .theoplayer-skin.vjs-paused .theo-player-wrapper 类中:之前它没有在 JSX 中公开,它只存在于播放器的实例中
    • 没问题。添加您的自定义类并用您的 css 覆盖该 css。必要时使用重要的
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2019-01-12
    • 2023-01-28
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多