繁体   English   中英

jQuery 到 Javascript 用于引导模式

[英]jQuery to Javascript for bootstrap modal

我曾经在 jQuery 中编写了一行代码来打开引导模式$("#Modal").modal("show"); . 现在我正在尝试准备使用纯 JS,以便我的应用程序不再需要加载 jQuery。

不知何故,我能够打开 model 但关闭按钮和模式外的点击事件不起作用。

var div = document.getElementById("TestModel");
div.innerHTML += "<%= j render 'modal' %>";
div.classList.add("show");
div.style.display = "block";
document.body.innerHTML += "<div class='modal-backdrop fade show'></div>";
document.body.classList.add("mode-open");

请给我一个最好的选择。

嘿,这也应该对你有用。 它不使用 JQuery 或 Bootstrap

HTML:

<a id="gdx-lighbox-modal-unique-1" data-hover="true" type="button" class="gdx-lightbox-tooltip-open-modal lightbox-link gdx-lightbox-button" data-open="gdx-lighbox-modal-1">
Click Here
</a>

<div class="gdx-modal" id="gdx-lighbox-modal-1" data-animation="slideInOutLeft">
<div class="gdx-modal-dialog">
<header class="gdx-modal-header">   
<a class="gdx-close-modal" aria-label="close modal" data-close="">✕</a>  
</header>  
<section class="gdx-modal-content">
//Form would go here instead of the image (image just an example)
<img src="https://gdxdesigns.com/wp-content/uploads/2020/11/little-frog.jpg">  </section> 
<footer class="gdx-modal-footer"> <h3 class="gdx-modal-image-title"></h3></footer> 
</div> 
</div>

CSS:

/* RESET RULES
–––––––––––––––––––––––––––––––––––––––––––––––––– */
:root {
    --lightgray: #efefef;
    --blue: steelblue;
    --white: #fff;
    --black: rgba(0, 0, 0, 0.8);
    --bounceEasing: cubic-bezier(0.51, 0.92, 0.24, 1.15);
  }

  * {
    padding: 0;
    margin: 0;
  }

  .gdx-body {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100vh;
    font: 16px/1.5 sans-serif;
  }

  .lightbox-link, a.lightbox-link {
    cursor: pointer;
  margin-left: 2.5%;
  }

  .gdx-lightbox-tooltip-open-modal img {
      width: 20px;
      height: 20px;
  }

  .gdx-lightbox-button {
    padding: 10px 20px;
    background: #000;
    padding: 10px 20px;
    font-weight: normal;
    border: 2px solid #000;
    color: #94c93b;
  }

  .gdx-lightbox-button:hover {
    background: #FFF;
    color: #000;
  }

  /* MODAL
  –––––––––––––––––––––––––––––––––––––––––––––––––– */
  .gdx-modal {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1rem;
    background: var(--black);
    cursor: pointer;
    visibility: hidden;
    opacity: 0;
    transition: all 0.35s ease-in;
    z-index: 9999 !important;
  }

  .gdx-modal.is-visible {
    visibility: visible;
    opacity: 1;
  }

  .gdx-modal-dialog {
    position: relative;
    max-width: 100vw;
    max-height: 100vh;
    border-radius: 5px;
    background: var(--white);
    overflow: auto;
    cursor: default;
    margin-top: 5%;
  }

  .gdx-modal-dialog > * {
    padding: 1rem;
  }

  .gdx-modal-header,
  .gdx-modal-footer {
    background: #FFF;
  }

  .gdx-modal-header .gdx-close-modal {
    font-size: 1.5rem;
  }

  .gdx-modal-header a {
      font-size: 2em;
  }

  .gdx-modal-content {
      text-align: center;
  }

  .gdx-modal-content img {
    margin: 0 !important;
  }

  .gdx-close-modal {
      float: right;
      cursor: pointer;
  }

  .gdx-modal p + p {
    margin-top: 1rem;
  }

  .gdx-modal-image-title {
      text-align: center;
      font-size: 1em;
      margin: 0;
  }

  /* ANIMATIONS
  –––––––––––––––––––––––––––––––––––––––––––––––––– */
  [data-animation] .gdx-modal-dialog {
    opacity: 0;
    transition: all 0.5s var(--bounceEasing);
  }

  [data-animation].is-visible .gdx-modal-dialog {
    opacity: 1;
    transition-delay: 0.2s;
  }

  [data-animation="slideInOutDown"] .gdx-modal-dialog {
    transform: translateY(100%);
  }

  [data-animation="slideInOutTop"] .gdx-modal-dialog {
    transform: translateY(-100%);
  }

  [data-animation="slideInOutLeft"] .gdx-modal-dialog {
    transform: translateX(-100%);
  }

  [data-animation="slideInOutRight"] .gdx-modal-dialog {
    transform: translateX(100%);
  }

  [data-animation="zoomInOut"] .gdx-modal-dialog {
    transform: scale(0.2);
  }

  [data-animation="rotateInOutDown"] .gdx-modal-dialog {
    transform-origin: top left;
    transform: rotate(-1turn);
  }

  [data-animation="mixInAnimations"].is-visible .gdx-modal-dialog {
    animation: mixInAnimations 2s 0.2s linear forwards;
  }

  [data-animation="slideInOutDown"].is-visible .gdx-modal-dialog,
  [data-animation="slideInOutTop"].is-visible .gdx-modal-dialog,
  [data-animation="slideInOutLeft"].is-visible .gdx-modal-dialog,
  [data-animation="slideInOutRight"].is-visible .gdx-modal-dialog,
  [data-animation="zoomInOut"].is-visible .gdx-modal-dialog,
  [data-animation="rotateInOutDown"].is-visible .gdx-modal-dialog {
    transform: none;
  }

  @keyframes mixInAnimations {
    0% {
      transform: translateX(-100%);
    }

    10% {
      transform: translateX(0);
    }

    20% {
      transform: rotate(20deg);
    }

    30% {
      transform: rotate(-20deg);
    }

    40% {
      transform: rotate(15deg);
    }

    50% {
      transform: rotate(-15deg);
    }

    60% {
      transform: rotate(10deg);
    }

    70% {
      transform: rotate(-10deg);
    }

    80% {
      transform: rotate(5deg);
    }

    90% {
      transform: rotate(-5deg);
    }

    100% {
      transform: rotate(0deg);
    }
  }

  /* Backend Instructions
–––––––––––––––––––––––––––––––––––––––––––––––––– */
.lightbox-instructions-heading {
    font-size: 1.8em !important;
}
.lightbox-instructions strong {
    font-size: 1.2em !important;
}
.gdx-lightbox-tooltip-open-modal img {
    margin: -0.3em;
    margin-left: 0.25em;
}
xmp {
    white-space: normal;
}
.lightbox-tooltip-instructions-content xmp{
    margin-bottom: 2em;
}

Javascript


    const openEls = document.querySelectorAll("[data-open]");
    const closeEls = document.querySelectorAll("[data-close]");
    const isVisible = "is-visible";

    for (const el of openEls) {
      el.addEventListener("click", function() {
        const modalId = this.dataset.open;
        document.getElementById(modalId).classList.add(isVisible);
      });
    }

    for (const el of closeEls) {
      el.addEventListener("click", function() {
        this.parentElement.parentElement.parentElement.classList.remove(isVisible);
      });
    }

    document.addEventListener("click", e => {
      if (e.target == document.querySelector(".gdx-modal.is-visible")) {
        document.querySelector(".gdx-modal.is-visible").classList.remove(isVisible);
      }
    });

    document.addEventListener("keyup", e => {
      // if we press the ESC
      if (e.key == "Escape" && document.querySelector(".gdx-modal.is-visible")) {
        document.querySelector(".gdx-modal.is-visible").classList.remove(isVisible);
      }
    });

JSFiddle 示例可以在这里看到。

如果您想将其下载为 Wordpress 插件(当然免费),您可以在此处下载

如果您想查看带有按钮模式弹出窗口的插件演示,您可以在此处看到

在反应中,以下代码在某种程度上起作用。

<div
  class={"modal fade " + (isShow ? "show" : "")}
  id="exampleModal"
  tabindex="-1"
  role="dialog"
  style={isShow ? { display: "block" } : null}
>
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Confirmation!</h5>
        <button type="button" class="close" onClick={handleNo}>
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">{message}</div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" onClick={handleNo}>
          NO
        </button>
        <button type="button" class="btn btn-primary" onClick={handleYes}>
          Yes
        </button>
      </div>
    </div>
  </div>
</div>

当“isShow”为真时显示模态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM