[英]Hide all video divs when one is selected
我是Java语言的新手,因此很难为此功能找出正确的代码。
我有多个div
。 每个div
有2个子div
,在单击时会互换。
例如,第一个div
是具有翻转效果的样式化图像。 单击图像后,它会与<video>
交换。
但是,我正在尝试为此添加一些功能...如果单击其他图像以播放<video>
,我希望其他video
停止并交换回原始图像div
。
这是我正在测试的代码。
function SwapDivsWithClick(div1, div2) { d1 = document.getElementById(div1); d2 = document.getElementById(div2); if (d2.style.display == "none") { d1.style.display = "none"; d2.style.display = "block"; } else { d1.style.display = "block"; d2.style.display = "none"; } }
<div id="project1Img" class="showDiv" style="display:block; border:2px dashed red; padding:25px;"> <p style="margin:0; color:red;"> <a href="javascript:SwapDivsWithClick('project1Img','project1Vid')">Img1</a> </p> </div> <div id="project1Vid" class="hideDiv" style="display:none; border:2px dotted blue; padding:25px;"> <video>video content</video> </div> <div id="project2Img" class="showDiv" style="display:block; border:2px dashed red; padding:25px;"> <p style="margin:0; color:red;"> <a href="javascript:SwapDivsWithClick('project2Img','project2Vid')">Img2</a> </p> </div> <div id="project2Vid" class="hideDiv" style="display:none; border:2px dotted blue; padding:25px;"> <video>video content</video> </div> <div id="project3Img" class="showDiv" style="display:block; border:2px dashed red; padding:25px;"> <p style="margin:0; color:red;"> <a href="javascript:SwapDivsWithClick('project3Img','project3Vid')">Img3</a> </p> </div> <div id="project3Vid" class="hideDiv" style="display:none; border:2px dotted blue; padding:25px;"> <video>video content</video> </div>
我要解决的问题是,当您单击第二个链接时,其他两个将恢复为原始的div1
。
如何使用document.getElementsByClassName('showDiv')
并遍历它们(如果元素id与div1
参数匹配,则style.display='block'
循环的下一个迭代),并在所有这些元素上设置style.display='block'
。 这将显示除ID为div1
的图像以外的所有图像。
然后使用document.getElementsByClassName('hideDiv')
并遍历它们(再次,如果元素ID匹配div2
,则style.display='none'
下一个),并设置style.display='none'
。 这将隐藏除div2
的ID之外的所有视频。
这会将列表中的所有div
(无论有多少个)重置为默认状态,然后您可以隐藏div1
并显示div2
,然后就完成了。
此替换功能将完全满足您的要求:
function SwapDivsWithClick(div1, div2) {
var d = document.getElementsByClassName('showDiv');
for (i = 0; i < d.length; ++i) {
d[i].style.display = (d[i].id == div1) ? 'none' : 'block';
}
d = document.getElementsByClassName('hideDiv');
for (i = 0; i < d.length; ++i) {
d[i].style.display = (d[i].id == div2) ? 'block' : 'none';
}
}
您愿意使用jQuery或其他DOM操作库吗? 如果文件的重量不成问题,则可以编写一些内容来相对轻松地解决此问题。 无论如何,如果您使用本机JS,则可能希望将精力集中在通过DOM元素循环的能力上。
这是jQuery中的简单版本
$('.toggler').on('click', function(e) { e.preventDefault(); var thisProjectVideo = $(this).parents('.projectImg').siblings('.projectVid'); var thisProjectImg = $(this).parents('.projectImg'); var allProjectVids = $('.projectVid'); var allprojectImgs = $('.projectImg'); allprojectImgs.removeClass('displayNone'); thisProjectImg.addClass('displayNone'); allProjectVids.addClass('displayNone'); thisProjectVideo.removeClass('displayNone'); })
.displayNone { display: none; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="videoContainer"> <div id="project1Img" class="projectImg showDiv" style="border:2px dashed red; padding:25px;"> <p style="margin:0; color:red;"> <a class="toggler">Img1</a> </p> </div> <div id="project1Vid" class="projectVid hideDiv displayNone" style="border:2px dotted blue; padding:25px;"> <video>video content</video> </div> </div> <div class="videoContainer"> <div id="project2Img" class="projectImg showDiv" style="border:2px dashed red; padding:25px;"> <p style="margin:0; color:red;"> <a class="toggler">Img2</a> </p> </div> <div id="project2Vid" class="projectVid hideDiv displayNone" style="border:2px dotted blue; padding:25px;"> <video>video content</video> </div> </div> <div class="videoContainer"> <div id="project3Img" class="projectImg showDiv" style="border:2px dashed red; padding:25px;"> <p style="margin:0; color:red;"> <a class="toggler">Img3</a> </p> </div> <div id="project3Vid" class="projectVid hideDiv displayNone" style="border:2px dotted blue; padding:25px;"> <video>video content</video> </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.