【问题标题】:How to make text draggable over a video using HTML?如何使用 HTML 使文本可拖动到视频上?
【发布时间】:2020-05-19 17:19:31
【问题描述】:

我想在视频上显示文本并希望使其可拖动到整个视频上,我可以显示它,但是当我拖动它然后放下时,它会出现在我的视频下方并且在它变得不可拖动之后。我正在使用反应 JS。

<div className="container" > 
        <div  onDrop={this.allowDrop} onDragOver={this.dragOver}> 
        <video id="video" width="820" src="video.mp4"/>
        </div>
        <div className="overlay">
            <p draggable onDragStart={this.allowDrag} id="hey">hey there</p>
        </div>
</div>
allowDrag=(e)=>{
  e.dataTransfer.setData("text", e.target.id);
}

 allowDrop = (e)=>{
  e.preventDefault();
  var data = e.dataTransfer.getData("text");
  e.target.appendChild(document.getElementById(data));
 }

 dragOver = (e)=>{
  e.preventDefault();
 }

我的 CSS 看起来像这样

.container { position:relative; }
.container video {
    position:relative;
    z-index:-1;
}
.overlay {
    position:absolute;
    top:0;
    left:0;
    z-index:1;
}

有什么建议吗??

【问题讨论】:

    标签: javascript html css reactjs


    【解决方案1】:

    鼠标指针坐标使用状态

    class Main extends React.Component {
      state = {
        x: 0,
        y: 0
      };
      allowDrag = e => {
        // e.preventDefault();
        e.dataTransfer.setData("text", e.target.id);
      };
    
      allowDrop = e => {
        e.preventDefault();
        // var data = e.dataTransfer.getData("text");
        // e.target.appendChild(document.getElementById(data));
      };
    
      dragOver = e => {
        e.preventDefault();
        // console.log(e.clientX, e.clientY);
        this.setState({
          x: e.clientX,
          y: e.clientY
        });
      };
    
      render() {
        return (
          <div className="container">
            <div onDrop={this.allowDrop} onDragOver={this.dragOver}>
              <video
                id="video"
                width="820"
                src="https://ak1.picdn.net/shutterstock/videos/1048614721/preview/stock-footage-young-student-watching-lesson-online-and-studying-from-home-young-woman-taking-notes-while-looking.mp4"
              />
            </div>
            <div
              className="overlay"
              style={{ top: this.state.y, left: this.state.x }}
            >
              <p draggable onDragStart={this.allowDrag} id="hey">
                hey there
              </p>
            </div>
          </div>
        );
      }
    }
    

    【讨论】:

    • 诀窍是有效的,但是当我拖放时,我的原始文本显示在我原来的鼠标指针下方一点。
    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 2020-09-14
    • 2019-05-03
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2012-05-30
    • 1970-01-01
    相关资源
    最近更新 更多