【问题标题】:How to hide video on div hover?如何在 div 悬停时隐藏视频?
【发布时间】:2019-09-11 04:02:07
【问题描述】:

我试图在 div 悬停时隐藏视频,但我似乎无法让它工作

目前,“live_video”类位于顶部,“eat_video”位于下方。当“video_hover”类悬停时,我想隐藏“live_video”的显示

我想要实现的是堆叠 2 个全屏视频,但是当您将鼠标悬停在浏览器窗口的右侧 50% 时,它会隐藏顶部视频并显示下方的视频

为什么 .right_hover:hover .live_video {display: none;} 不起作用?

 <div class="live_video">
 <video muted class="video" autoplay="autoplay" loop="loop" preload="auto">
    <source src="NM_Web_Live_Vid_v1_1_1.mp4" type="video/mp4" >
 </video>
 </div>     

  <div class="eat_video">
  <video muted class="video" autoplay="autoplay" loop="loop" preload="auto">
    <source src="NM_Web_Live_EatPlay_v1_1_1.mp4" type="video/mp4" >
 </video>
 </div> 

CSS

.video_hover {
  width: 50%;
  height: 100vh;
  position: absolute;
  right: 0;
  top: 0;
  z-index: 99;
  cursor: pointer;
}

.eat_video {
  position: absolute;
  width: 100%;
  height: 100vh;
  top: 0;
  z-index: -1;
}

.video_hover:hover .live_video {
  display: none;
}

【问题讨论】:

  • 尝试在此处添加 codepen 链接或 sn-p。
  • 您必须从 DOM 中删除该视频。因为你只是隐藏它,但声音还在播放,这不是合适的方法!例如使用 jQuery 删除

标签: css


【解决方案1】:

要使.video_hover:hover .live_video 生效,有一些基本要求 - 主要要求是文档中存在具有类video_hover(和子live_video)的元素。

要实现您想做的事情,您可以对您的 CSS/HTML 应用以下更改:

/* Style video containers to occupy full client area of browser */
.video_hover {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
  cursor: pointer;
}
.video_hover video {
  display:block;
  width: 100%;
  height: 100%;
}

/* Define (hidden) pseudo element that will catch hover interactions
to control the visiblity of respective video elements */ 
.video_hover::before {
  content:"";
  display:block;
  width:50%;
  height:100%; 
  position: absolute;
  top: 0;
  z-index:100;
}   
/* Specify placement of each pseudo element to occupy each side of the
client area */ 
.live_video::before {
  right: 0;
}
.eat_video::before {
  left: 0;
}

/* Eat video hidden when hovering not over right half of screen */
.eat_video video {
  visibility:hidden;
} 

/* When live video (or it's pseudo element) is hovered, "hide" the 
video */
.live_video:hover video {
  visibility:hidden;
}
/* When live video (or it's pseudo element) is hovered, "show" the 
next eact_video video */
.live_video:hover + .eat_video video {
  visibility:visible;    
} 
<!-- Add video_hover to class list -->
<div class="live_video video_hover">
  <video muted class="video" autoplay="autoplay" loop="loop" preload="auto">
    <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4" >
 </video>
</div>
<!-- Add video_hover to class list -->
<div class="eat_video video_hover">
  <video muted class="video" autoplay="autoplay" loop="loop" preload="auto">
    <source src="https://www.fbdemo.com/video/video/demo.mp4" type="video/mp4" >
 </video>
</div>

【讨论】:

  • 您好,感谢您的回复。我想要实现的是堆叠 2 个全屏视频,但是当您将鼠标悬停在浏览器窗口的右侧 50% 时,它会隐藏顶部视频并显示下方的视频
  • 不客气 - 有趣!请参阅我更新的答案。这有帮助吗?
  • 我希望这不是推动它,但我也试图触发悬停动画,并在页面的左右半部分显示文本动画?我该如何使用与视频相同的方法来做到这一点?
  • @BurgerSasha 没问题 - 这应该是可能的。您能否发布一个新问题,详细说明您对动画的要求并将我链接到该问题?我很乐意在那里提供帮助:)
  • 我创建了一个新问题 :) stackoverflow.com/questions/57897939/…
【解决方案2】:

$('.video_wrapper .video_hover').hover(function(){
	$('.video_wrapper').addClass('isHover');
}, function(){
	$('.video_wrapper').removeClass('isHover');
}
);
.video_wrapper{
  overflow: hidden;
  position: relative;
}

.video_wrapper video{
  height: auto;
  width: 100vw;
}

.video_wrapper .eat_video{
  left: 0;
  opacity: 0;
  position: absolute;
  top: 0;
}

.video_wrapper .video_hover{
  bottom: 0;
  cursor: pointer;
  position: absolute;
  right: 0;
  top: 0;
  width: 50%;
  z-index: 1;
}

.video_wrapper .live_video,
.video_wrapper .eat_video{
  -webkit-transition: all 0.3s ease-in-out;
     -moz-transition: all 0.3s ease-in-out;
       -o-transition: all 0.3s ease-in-out;
          transition: all 0.3s ease-in-out;    
}

.video_wrapper.isHover .live_video{
  opacity: 0;
}

.video_wrapper.isHover .eat_video{
  opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div class=video_wrapper>
  <div class="live_video">
     <video muted class="video" autoplay="autoplay" loop="loop" preload="auto">
        <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4" >
     </video>
  </div>     
  <div class="eat_video">
     <video muted class="video" autoplay="autoplay" loop="loop" preload="auto">
        <source src="https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-720p.mp4" type="video/mp4" >
     </video>
  </div> 
  <div class="video_hover"></div>
</div>

【讨论】:

    猜你喜欢
    • 2020-09-14
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    相关资源
    最近更新 更多