当前位置: 首页 > 知识库问答 >
问题:

显示同一类的不同按钮的不同div

许俊贤
2023-03-14

我(目前)有三个按钮

<p><button class="trigger-overlay" type="button">Open Overlay 1</button></p>
<p><button class="trigger-overlay" type="button">Open Overlay 2</button></p>
<p><button class="trigger-overlay" type="button">Open Overlay 3</button></p>

使用这些按钮,我想显示不同的菜单/覆盖。覆盖图如下所示:

        <!-- Menu1 -->
<div class="overlay overlay-hugeinc">
    <button type="button" class="overlay-close">Close</button>
    <nav>
        <ul>
            <li><a class="menuitem1">Menu1</a></li>
            <li><a class="menuitem2">Item2</a></li>
        </ul>
    </nav>
</div>
<!-- Menu2 -->
<div class="overlay overlay-hugeinc">
    <button type="button" class="overlay-close">Close</button>
    <nav>
        <ul>
            <li><a class="menuitem1">Menu2</a></li>
            <li><a class="menuitem2">Item1</a></li>
        </ul>
    </nav>
</div>
        <!-- Menu3 -->
<div class="overlay overlay-hugeinc">
    <button type="button" class="overlay-close">Close</button>
    <nav>
        <ul>
            <li><a class="menuitem1">Menu3</a></li>
            <li><a class="menuitem2">Item1</a></li>
        </ul>
    </nav>
</div>

这方面的JS是:

(function() {
        var triggerButtons = document.getElementsByClassName( 'trigger-overlay' ),
        overlay = document.querySelector( 'div.overlay' ),
        closeBttn = overlay.querySelector( 'button.overlay-close' );
        transEndEventNames = {
            'WebkitTransition': 'webkitTransitionEnd',
            'MozTransition': 'transitionend',
            'OTransition': 'oTransitionEnd',
            'msTransition': 'MSTransitionEnd',
            'transition': 'transitionend'
        },
        transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ],
        support = { transitions : Modernizr.csstransitions };

    function toggleOverlay() {
        if( classie.has( overlay, 'open' ) ) {
            classie.remove( overlay, 'open' );
            classie.add( overlay, 'close' );
            var onEndTransitionFn = function( ev ) {
                if( support.transitions ) {
                    if( ev.propertyName !== 'visibility' ) return;
                    this.removeEventListener( transEndEventName, onEndTransitionFn );
                }
                classie.remove( overlay, 'close' );
            };
            if( support.transitions ) {
                overlay.addEventListener( transEndEventName, onEndTransitionFn );
            }
            else {
                onEndTransitionFn();
            }
        }
        else if( !classie.has( overlay, 'close' ) ) {
            classie.add( overlay, 'open' );
        }
    }


for (var i = 0; i < triggerButtons.length; i++) {
    triggerButtons[i].addEventListener( 'click', toggleOverlay );
}
    closeBttn.addEventListener( 'click', toggleOverlay );
})();

我的问题是只有菜单1正在显示。脚本可以正常工作,但是menu2和menu3没有显示。

我想这一定是函数toggleoverlay缺少的东西。也许是a$(this)什么的(对不起我的JS已经不是以前的样子了)。我在triggerbuttons循环,然后从google chrome dev中点击了“Right”按钮(我想,很难说出来)。

预期结果:如果我按下按钮3,菜单3显示。如果我按下按钮2,我会看到菜单2,依此类推。

共有2个答案

堵凯
2023-03-14

只是您可以为div使用不同的id并使用该id执行操作

韩景辉
2023-03-14

此代码将解决您的问题。我添加了红色和蓝色的css类,分别用于关闭和打开,以使其可见。

null

(function() {
  var triggerButtons = document.getElementsByClassName('trigger-overlay'),
    overlay = document.querySelectorAll('div.overlay');
  var closeButtons = [];
  for (var i = 0; i < overlay.length; i++) {
    var closeBttn = overlay[i].querySelector('button.overlay-close');
    closeButtons.push(closeBttn);
  }

  transEndEventNames = {
      'WebkitTransition': 'webkitTransitionEnd',
      'MozTransition': 'transitionend',
      'OTransition': 'oTransitionEnd',
      'msTransition': 'MSTransitionEnd',
      'transition': 'transitionend'
    },
    transEndEventName = transEndEventNames[Modernizr.prefixed('transition')],
    support = {
      transitions: Modernizr.csstransitions
    };

  function toggleOverlay(overlay) {
    if (classie.has(overlay, 'open')) {
      classie.remove(overlay, 'open');
      classie.add(overlay, 'close');
      var onEndTransitionFn = function(ev) {
        if (support.transitions) {
          if (ev.propertyName !== 'visibility') return;
          this.removeEventListener(transEndEventName, onEndTransitionFn);
        }
        classie.remove(overlay, 'close');
      };
      if (support.transitions) {
        overlay.addEventListener(transEndEventName, onEndTransitionFn);
      } else {
        onEndTransitionFn();
      }
    } else {
      classie.add(overlay, 'open');
      classie.remove(overlay, 'close');
    }
  }


  for (var i = 0; i < triggerButtons.length; i++) {
    triggerButtons[i].addEventListener('click', (function(i) {
      return function() {
        toggleOverlay(overlay[i])
      };
    })(i));
  }

  for (var i = 0; i < closeButtons.length; i++) {
    closeButtons[i].addEventListener('click', (function(i) {
      return function() {
        toggleOverlay(overlay[i])
      };
    })(i));
  }
})();
.overlay.close {
  background-color: red;
}
.overlay.open {
  background-color: blue;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/classie/1.0.1/classie.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script>
<p>
  <button class="trigger-overlay" type="button">Open Overlay 1</button>
</p>
<p>
  <button class="trigger-overlay" type="button">Open Overlay 2</button>
</p>
<p>
  <button class="trigger-overlay" type="button">Open Overlay 3</button>
</p>

<!-- Menu1 -->
<div class="overlay overlay-hugeinc close">
  <button type="button" class="overlay-close">Close</button>
  <nav>
    <ul>
      <li><a class="menuitem1">Menu1</a>
      </li>
      <li><a class="menuitem2">Item2</a>
      </li>
    </ul>
  </nav>
</div>
<!-- Menu2 -->
<div class="overlay overlay-hugeinc close">
  <button type="button" class="overlay-close">Close</button>
  <nav>
    <ul>
      <li><a class="menuitem1">Menu2</a>
      </li>
      <li><a class="menuitem2">Item1</a>
      </li>
    </ul>
  </nav>
</div>
<!-- Menu3 -->
<div class="overlay overlay-hugeinc close">
  <button type="button" class="overlay-close">Close</button>
  <nav>
    <ul>
      <li><a class="menuitem1">Menu3</a>
      </li>
      <li><a class="menuitem2">Item1</a>
      </li>
    </ul>
  </nav>
</div>
 类似资料:
  • 我在制作这个项目网站的时候,突然想到要制作一个弹出框来显示产品的描述。当我制作弹出式消息框时,它会出现在单击不同的图像时,我看到它会显示不同产品的相同消息,即使在对每种产品给出不同的描述之后也是如此。我不太懂JavaScript,但我想必须在那里添加一些代码。 这里是代码- 这是我从codepen中获取的模板。木卫一。

  • 我一共有四个按钮,即btn1、btn2、btn3、btn4。同时我有三个声音。btn1停止/暂停所有声音。btn1播放sound1,当我按下btn2或btn3时,sound1应根据按下的按钮停止并播放相应的声音。我正在尝试使用以下代码来完成此操作: } P.S 我故意使用 onclicklistener 请告诉我我做错了什么。

  • 引用EAVSet.nsi的内容: !define PRODUCT_NAME "ESET NOD32 Antivirus" SetCompressor /SOLID lzma SetCompressorDictSize 32 !include "MUI.nsh" !include "UsefulLib.nsh" !define MUI_ABORTWARNING !define MUI_ICON

  • 我在sencha touch 2中创建了一个索引页面,在其中我在容器内创建了一些自定义按钮 这些按钮看起来像这个 单击橙色按钮后,我想显示一个新视图。 我尝试了ext.Navigation view,但它不是我想要的。我必须在按钮上添加一个事件监听器,还是我必须做一些其他事情请建议 我在controller文件夹main.js中创建了一个新控制器 还有我的新视图Eligibelity.js代码 还

  • 我们在一个基于Swing/Spring的大型应用程序中看到以下异常。该错误发生在用户交互过程中,触发Spring通过commons logging报告警告,后者反过来调用log4j。不幸的是,我无法将这个问题分解为一个独立的示例。 Windows XP SP3、log4j-1.2.17、commons-logging-1.1.1、spring-4.1.2上的Java 8u40 未使用OSGI、we

  • 我正在将无边框按钮的概念应用到我正在开发的应用程序中。我可以编辑我的按钮完美到目前为止与以下问题的帮助: 如何创建标准的无边框按钮(如设计指南中提到的)? Android绘图分隔符/分隔符线布局? 但是现在我需要显示一个不同的背景图像,或者当按钮由于用户没有填写某些必填字段而未启用时需要强调的内容。 到目前为止,我的代码是: 现在,我打算在按钮的背景中放置一个带条纹的图像,以显示它何时被禁用。通过