(HTML / Js)循环元素可见性

英镑黄油

var terminal = document.getElementById('terminal');
var vncScreen = document.getElementById('screen');
var video = document.getElementById('video');

var vncToggle = document.getElementById('vncToggle');
var termToggle = document.getElementById('terminalToggle');

termToggle.onclick = function toggleTerminal() {

  if (terminal.classList.contains('hide')) {
    terminal.classList.remove('hide'); 
    if (vncScreen.classList.contains('hide')) {} else {vncScreen.classList.add('hide')}
    if (video.classList.contains('hide')) {} else {video.classList.add('hide')}
  } else {
    terminal.classList.add('hide'); 
    if (video.classList.contains('hide')) {video.classList.remove('hide')} else {}
  }
}

vncToggle.onclick = function toggleVNC() {

  if (vncScreen.classList.contains('hide')) {
    vncScreen.classList.remove('hide'); 
    if (terminal.classList.contains('hide')) {} else {terminal.classList.add('hide')}
    if (video.classList.contains('hide')) {} else {video.classList.add('hide')}
  } else {
    vncScreen.classList.add('hide'); 
    if (video.classList.contains('hide')) {video.classList.remove('hide')} else {}
	}
}
.black-box {
  background: black;
  height: 500px;
  width: 500px;
  position: absolute;
}

.green-box {
  background: green;
  height: 500px;
  width: 500px;
  position: absolute;
}

.blue-box {
  background: blue;
  height: 500px;
  width: 500px;
  position: absolute;
}

.hide {
  display: none;
}
<button class="button" id="terminalToggle" title="Toggle Terminal">Toggle terminal</button>
<button class="button" id="vncToggle" title="Toggle Terminal">Toggle vnc</button>

<div id='video' class="black-box"></div>
<div id='screen' class="green-box hide"></div>
<div id='terminal' class="blue-box hide"></div>

基本上,当您单击“切换终端”时,它应显示为蓝色,然后再次单击将返回黑色。当您单击“切换vnc”时,它应显示为绿色,然后如果再次单击,则返回黑色。如果单击“ Toggle vnc”,它已经是蓝色,则应该变成绿色,反之亦然(但请单击“ Toggle terminal”)

我目前有以下内容Js

      var terminal = document.getElementById('terminal');          //video-like element
      var vncScreen = document.getElementById('screen');           //video-like element
      var video = document.getElementById('video');                //video-like element

      var vncToggle = document.getElementById('vncToggle');        //button
      var termToggle = document.getElementById('terminalToggle');  //button

      termToggle.onclick = function toggleTerminal() {
        terminal.classList.toggle('hide');
        vncScreen.classList.toggle('hide');
        video.classList.toggle('hide');
      }
      vncToggle.onclick = function toggleVNC() {
        vncScreen.classList.toggle('hide');
        terminal.classList.toggle('hide');
        video.classList.toggle('hide');
      }

css

.hide {
  display: none;
}

当我只有两个不同的HTML元素时,这种类切换方法就起作用了。现在有3个,我不确定它是否可以正常工作。

video最初是可见的,即hide不在其classList

terminal最初是隐藏的,即hide在其classList

vncScreen最初是隐藏的,即hide在其classList

何时toggleTerminal()调用:

  • video 变得隐藏
  • terminal 变得可见
  • vncScreen变得可见(但不应

如果toggleVNC()被调用(在之后toggleTerminal()):

  • video变得再次可见(但不应
  • terminal 变得隐藏
  • vncScreen 变得隐藏

请注意,如果两个函数调用中的任何一个仅由它们自己切换,则此方法将起作用(前提是我vncScreen.classList.toggle('hide');toggleTerminal()terminal.classList.toggle('hide');删除toggleVNC())。

问题是我需要考虑按termToggle和的任何按钮顺序vncToggle本质上,我的目标是“循环”这些元素,以便:

1)切换“选定”元素(即termToggle对应于terminal元素的可见性&&vncToggle对应于vncScreen元素的可见性)隐藏了其余两个元素(分别为video&& vncScreen|| terminal&&& video

2)“选定”元素的切换顺序不影响1)

3)第二个“ selected”元素的切换将隐藏自身和其他未隐藏的元素 video

关于如何最好地做到这一点的任何想法?

曾经我考虑过要进行一些逻辑运算,以评估是否hide包含在适当classList中,然后相应地手动添加或删除hide类,但这对我来说似乎很草率(idk,也许不是吗?)。

英镑黄油

有关功能,请参见有问题的代码段,Js在此处多余地发布:

var terminal = document.getElementById('terminal');
var vncScreen = document.getElementById('screen');
var video = document.getElementById('video');

var vncToggle = document.getElementById('vncToggle');
var termToggle = document.getElementById('terminalToggle');

termToggle.onclick = function toggleTerminal() {

  if (terminal.classList.contains('hide')) {
    terminal.classList.remove('hide'); 
    if (vncScreen.classList.contains('hide')) {} else {vncScreen.classList.add('hide')}
    if (video.classList.contains('hide')) {} else {video.classList.add('hide')}
  } else {
    terminal.classList.add('hide'); 
    if (video.classList.contains('hide')) {video.classList.remove('hide')} else {}
  }
}

vncToggle.onclick = function toggleVNC() {

  if (vncScreen.classList.contains('hide')) {
    vncScreen.classList.remove('hide'); 
    if (terminal.classList.contains('hide')) {} else {terminal.classList.add('hide')}
    if (video.classList.contains('hide')) {} else {video.classList.add('hide')}
  } else {
    vncScreen.classList.add('hide'); 
    if (video.classList.contains('hide')) {video.classList.remove('hide')} else {}
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过指令更新HTML元素的可见性

基于权限而不是MVC中角色的HTML元素可见性

HTML - 在页面上删除元素的“存在”但保持其可见性?

在可见性切换时调整div的大小(在HTML +纯JS中)?

在HTML和JS中更改可见性属性的怪癖

HTML上的Yii2可见性属性

使用Java脚本更改html可见性

如何禁用已经具有“可见性:visible!important;”的html元素槽css或javascript。属性?

AJAX调用-动态JSON数据库数组-隐藏HTML元素-具有CSS可见性属性

如何在呈现html按钮之前更改html按钮的可见性?滑轨

使用jsp切换动态创建的html按钮的可见性

在 HTML5 中切换 div 块的可见性

可见性属性在 html 文件中不起作用

使用jQuery / JavaScript处理HTML表(用于列重新排序,可见性)?

使用简单的MVC Html.DropDownList来控制div,onLoad和selectChange的可见性

无法在渲染的HTML代码中更改Panel的可见性

html div拖动可见性无法在Safari浏览器中进行

切换可见性不起作用(HTML / CSS / Javascript)

如何基于html中选择的选项切换div的可见性

更改 Divs 的可见性,在网页加载时使用 jQuery 和 html 选择

使HTML map元素可见

操纵SVG元素的可见性

图表元素可见性

AngularJS:监视元素的可见性

使元素无法操纵可见性

如何通过使用 jquery 将鼠标悬停在另一个 html 元素上来更改另一个 html 元素的可见性/不透明度?

Android:可见性:gone元素很快可见

当单击诸如showcaps,small,number之类的按钮时,html中的div不变,可见性不起作用

如何将HTML转换为PDF,以保持可滚动区域内内容的可见性