【问题标题】:Hide/Show video element based on button click with javascript隐藏/显示基于 javascript 按钮单击的视频元素
【发布时间】:2020-05-25 15:34:33
【问题描述】:

目前,我有这样的 HTML 设置:

<video  autoplay="on" id="videoNohighlight" muted src="<?php echo get_site_url(); ?>/wp-content/uploads/2020/02/videonohighlight.mp4"></video>
<video  autoplay="on" id="video_Q1" style="display:none;" muted src="<?php echo get_site_url(); ?>/wp-content/uploads/2020/03/Q1.mp4"></video>
<video  autoplay="on" id="video_Q2" style="display:none;" muted src="<?php echo get_site_url(); ?>/wp-content/uploads/2020/03/Q2.mp4"></video>
<video  autoplay="on" id="video_Q3" style="display:none;" muted src="<?php echo get_site_url(); ?>/wp-content/uploads/2020/03/Q3.mp4"></video>
<video  autoplay="on" id="video_Q4" style="display:none;" muted src="<?php echo get_site_url(); ?>/wp-content/uploads/2020/03/Q4.mp4"></video>

<a href="#case_scroll_to" onClick="reply_click(this.id)" class="qtr_selector btn btn-light" id="_Q1">Q1</a>
<a href="#case_scroll_to" onClick="reply_click(this.id)" class="qtr_selector btn btn-light" id="_Q2">Q2</a>
<a href="#case_scroll_to" onClick="reply_click(this.id)" class="qtr_selector btn btn-light" id="_Q3">Q3</a>
<a href="#case_scroll_to" onClick="reply_click(this.id)" class="qtr_selector btn btn-light" id="_Q4">Q4</a>

和这样的Javascript

function reply_click(clicked_id){
    var video = document.getElementById("video" + clicked_id);
    var videoNohighlight = document.getElementById("videoNohighlight");

    if (video.style.display === "none") {
        video.style.display = "block";
        videoNohighlight.style.display = "none";
    } else {
        video.style.display = "none !important"; 
    }               
}   

JSFiddle 链接:https://jsfiddle.net/7x82vsah/1/

如果有人点击了所有按钮,这些按钮将充当切换按钮,而不是显示一个视频,然后当点击下一个按钮时,隐藏上一个视频并在其位置显示新视频。需要进行哪些更改才能启用此功能?

谢谢

【问题讨论】:

    标签: javascript html css wordpress show-hide


    【解决方案1】:

    当前,当按下按钮时,您只是显示或隐藏该特定视频,但同时需要做的是在单击特定视频按钮时隐藏所有其他视频。您可以做的是为所有视频元素添加一个类,并在单击按钮时循环播放它们。

    function reply_click(clicked_id){
      var videos = document.getElementsByClassName("video-tabs") // video-tabs is the class you give to all your video elements
      var videoNohighlight = document.getElementById("videoNohighlight");  
      for (var i=0; i<= videos.length -1; i++){
        if (videos[i].id == "video_"+clicked_id) {
          var isVisible = videos[i].style.display
          videos[i].style.display = isVisible === "none" ? "block" : "none";
          videoNohighlight.style.display = isVisible === "none" ? "block" : "none";
        } else {
          videos[i].style.display = "none";
        }
      }
    
    }
    

    【讨论】:

    • 现在完全没有变化
    • 你能分享你的代码sn-p(html和js)。你可以在jsfiddle.net
    • 当然这是链接:jsfiddle.net/7x82vsah/1 这是我的代码顺便说一句,没有添加您发送的代码。
    • 在这里,在上面的 sn-p 中,我将按钮的 id 与视频的 id 进行了比较,这就是它不起作用的原因,我已经修复了这里,它现在按预期工作。如果这解决了您的问题,请接受答案。链接:jsfiddle.net/1rjz83L0/13
    【解决方案2】:

    你只需要改变你的功能:

    function reply_click(clicked_id){
      var videos = document.getElementsByTagName('video');
    
      for (var ctr = 0; ctr < videos.length; ctr++) {
        videos[ctr].style.display= 'none';      
      }
    
      var video = document.getElementById("video" + clicked_id);  
      video.style.display= 'block';
    }   
    

    【讨论】:

    • 通过标签名称获取项目是不正确的,因为页面上可能存在不属于该组件的其他视频标签,并且它们的样式可能会因为此功能而受到影响
    • 这真的取决于当前的上下文。手头的上下文不建议&lt;video&gt; 标记的其他用途。如果我们真的想要更好的做法,我建议只使用一个&lt;video&gt; 标签并在每次点击&lt;a&gt; 时切换src。为了更好的设计,一个带有多个缩略图的&lt;video&gt; 标签。
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2021-07-17
    • 2021-12-08
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多