JS实现仿微信支付弹窗功能

先奉上效果图

html代码

<!DOCTYPE html>
<html>
  <head>
    <title>仿手机微信支付输入密码界面效果</title>
    <meta charset="utf-8" />
    <meta name="viewport" content="initial-scale=1.0, width=device-width, user-scalable=no" />
    <link rel="stylesheet" type="text/css" href="css/rest.css" rel="external nofollow" />
  </head>
  <body>
    <!-- 打开弹窗按钮 -->
    <button id="myBtn">去支付</button>
    <!-- 弹窗 -->
    <div id="myModal" class="modal">
      <!-- 弹窗内容 -->
      <div class="modal-content">
        <div class="paymentArea">
          <div class="paymentArea-Entry">
            <div class="paymentArea-Entry-Head">
              <img src="images/xx_03.jpg" class="close" />
              <img src="images/jftc_03.png" class="useImg">
              <span class="tips-txt">请输入支付密码</span>
            </div>
            <div class="paymentArea-Entry-Content">
              <div class="pay-name">测试商品</div>
              <div class="pay-price">¥88.88</div>
            </div>
            <ul class="paymentArea-Entry-Row"></ul>
          </div>
          <div class="paymentArea-Keyboard">
            <h4>
              <img src="images/jftc_14.jpg" height="10" />
            </h4>
            <ul class="target">
              <li>
                <a>1</a>
                <a>2</a>
                <a>3</a>
              </li>
              <li>
                <a>4</a>
                <a>5</a>
                <a>6</a>
              </li>
              <li>
                <a>7</a>
                <a>8</a>
                <a>9</a>
              </li>
              <li>
                <a>清空</a>
                <a> 0 </a>
                <a>删除</a>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </div>
  </body>
</html> 

css

body {
        margin: 0;
        padding: 0;
        font-size: 0.3rem;
        font-family: "微软雅黑", arial;
      }
      ul,
      li {
        margin: 0;
        padding: 0;
        list-style: none;
      }
      img {
        display: block;
      }
      #myBtn {
        display: block;
        width: 80%;
        height: auto;
        margin: 5rem auto;
        padding: 0.2rem;
        border-radius: 5px;
        border: 0;
        outline: none;
        font-family: "微软雅黑";
        color: #fff;
        background-color: #5CB85C;
      }
      /* 弹窗 */
      .modal {
        display: none;
        /* 默认隐藏 */
        position: fixed;
        z-index: 1;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        overflow: auto;
        background-color: rgb(0, 0, 0);
        background-color: rgba(0, 0, 0, 0.4);
        -webkit-animation-name: fadeIn;
        -webkit-animation-duration: 0.4s;
        animation-name: fadeIn;
        animation-duration: 0.4s
      }
      /* 弹窗内容 */
      .modal-content {
        position: fixed;
        bottom: 0;
        /*background-color: #fefefe;*/
        width: 100%;
        -webkit-animation-name: slideIn;
        -webkit-animation-duration: 0.4s;
        animation-name: slideIn;
        animation-duration: 0.4s
      }
      /**
       * 支付弹窗样式
       * **/
      .paymentArea-Entry {
        width: 90%;
        margin: 0 auto;
        padding-bottom: 0.3rem;
        background-color: #fff;
      }
      .paymentArea-Entry-Head {
        display: flex;
        display: -webkit-flex;
        height: 0.8rem;
        line-height: 0.8rem;
        padding: 0.2rem;
        border-bottom: 1px solid #5CB85C;
      }
      /* 关闭按钮 */
      .paymentArea-Entry-Head .close {
        width: 0.5rem;
        height: 0.5rem;
        padding: 0.15rem 0.15rem 0.15rem 0;
      }
      .paymentArea-Entry-Head .close:hover,
      .paymentArea-Entry-Head .close:focus {
        color: #000;
        text-decoration: none;
        cursor: pointer;
      }
      .paymentArea-Entry-Head .useImg {
        width: 0.8rem;
        height: 0.8rem;
        margin-right: 0.15rem;
      }
      .paymentArea-Entry-Head .tips-txt {
        font-size: 0.4rem;
      }
      .paymentArea-Entry-Content {
        position: relative;
        padding: 0.2rem 0;
        text-align: center;
      }
      .paymentArea-Entry-Content:after {
        content: "";
        position: absolute;
        bottom: 0;
        left: 0.3rem;
        right: 0.3rem;
        height: 1px;
        background-color: #ddd;
      }
      .paymentArea-Entry-Content .pay-name {
        font-size: 0.3rem;
      }
      .paymentArea-Entry-Content .pay-price {
        font-size: 0.4rem;
        font-weight: bold;
      }
      ul.paymentArea-Entry-Row {
        display: flex;
        display: -webkit-flex;
        justify-content: space-between;
        margin: 0.2rem 0.3rem 0 0.3rem;
        padding: 0;
        border: 1px solid #a2a2a2;
      }
      ul.paymentArea-Entry-Row li {
        position: relative;
        flex-grow: 1;
        min-width: 1rem;
        height: 0.8rem;
        line-height: 0.8rem;
        text-align: center;
        border-right: 1px solid #ddd;
      }
      ul.paymentArea-Entry-Row li:last-child {
        border-right: 0;
      }
      ul.paymentArea-Entry-Row li img {
        position: absolute;
        top: 50%;
        left: 50%;
        width: 0.5rem;
        height: 0.5rem;
        margin: -0.25rem 0 0 -0.25rem;
      }
      .paymentArea-Keyboard {
        margin-top: 1.2rem;
        background-color: #fff;
      }
      .paymentArea-Keyboard h4 {
        height: 0.5rem;
        line-height: 0.5rem;
        margin: 0;
        text-align: center;
      }
      .paymentArea-Keyboard h4 img {
        width: 0.93rem;
        height: 0.32rem;
        margin: 0 auto;
      }
      .paymentArea-Keyboard h4:active {
        background-color: #e3e3e3;
      }
      .paymentArea-Keyboard ul {
        border-top: 1px solid #ddd;
      }
      .paymentArea-Keyboard li {
        display: flex;
        display: -webkit-flex;
        justify-content: space-between;
        border-bottom: 1px solid #ddd;
      }
      .paymentArea-Keyboard li a {
        flex-grow: 1;
        display: block;
        min-width: 1rem;
        line-height: 1rem;
        border-right: 1px solid #ddd;
        font-size: 0.3rem;
        text-align: center;
        text-decoration: none;
        color: #000;
      }
      .paymentArea-Keyboard li:last-child,
      .paymentArea-Keyboard li a:last-child {
        border: 0;
      }
      .paymentArea-Keyboard li a:active {
        outline: none;
        background-color: #ddd;
      }
      /* 添加动画 */
      @-webkit-keyframes slideIn {
        from {
          bottom: -300px;
          opacity: 0
        }
        to {
          bottom: 0;
          opacity: 1
        }
      }
      @keyframes slideIn {
        from {
          bottom: -300px;
          opacity: 0
        }
        to {
          bottom: 0;
          opacity: 1
        }
      }
      @-webkit-keyframes fadeIn {
        from {
          opacity: 0
        }
        to {
          opacity: 1
        }
      }
      @keyframes fadeIn {
        from {
          opacity: 0
        }
        to {
          opacity: 1
        }
      } 

js

//定义根目录字体大小,通过rem实现适配
      document.addEventListener("DOMContentLoaded", function() {
        var html = document.documentElement;
        var windowWidth = html.clientWidth;
        //console.log(windowWidth)
        html.style.fontSize = windowWidth / 7.5 + "px";
      }, false);
      // 获取弹窗
      var modal = document.getElementById('myModal');
      // 打开弹窗的按钮对象
      var btn = document.getElementById("myBtn");
      // 获取 <span> 元素,用于关闭弹窗 that closes the modal
      var span = document.getElementsByClassName("close")[0];
      /*创建密码输入框*/
      var entryArea = document.querySelector(".paymentArea-Entry-Row");
      for(var i = 0; i < 6; i++) {
        var li = document.createElement("li");
        entryArea.appendChild(li);
      }
      /*键盘操作*/
      var doms = document.querySelectorAll('ul li a');
      var entryLis = document.querySelectorAll(".paymentArea-Entry-Row li");
      var pwds = ""; //存储密码
      var count = 0; //记录点击次数
      for(var i = 0; i < doms.length; i++) {
        ! function(dom, index) {
          dom.addEventListener('click', function() {
            var txt = this.innerHTML;
            switch(txt) {
              case "清空":
                if(count != 0) {
                  for(var i = 0; i < entryLis.length; i++) {
                    entryLis[i].innerHTML = "";
                  }
                  pwds = "";
                  count = 0;
                  console.log(pwds)
                  console.log(count)
                }
                break;
              case "删除":
                if(count != 0) {
                  console.log(pwds)
                  entryLis[count - 1].innerHTML = "";
                  pwds = pwds.substring(0, pwds.length - 1);
                  count--;
                  console.log(pwds)
                  console.log(count)
                }
                break;
              default:
                /*通过判断点击次数 向输入框填充内容*/
                if(count < 6) {
                  /*创建一个图片对象 插入到方框中*/
                  var img = new Image();
                  img.src = "images/dd_03.jpg";
                  entryLis[count].appendChild(img);
                  /*为存储密码的对象赋值*/
                  if(pwds == "") {
                    pwds = txt;
                  } else {
                    pwds += txt;
                  }
                  count++;
                  if(pwds.length == 6) {
                    location.href = "https://www.baidu.com";
                  }
                } else {
                  return;
                  alert("超出限制")
                }
            }
          });
        }(doms[i], i);
      }
      // 点击按钮打开弹窗
      btn.onclick = function() {
        modal.style.display = "block";
      }
      // 点击 <span> (x), 关闭弹窗
      span.onclick = function() {
        modal.style.display = "none";
        if(count != 0) {
          for(var i = 0; i < entryLis.length; i++) {
            entryLis[i].innerHTML = "";
          }
          pwds = "";
          count = 0;
        }
      }
      // 在用户点击其他地方时,关闭弹窗
      window.onclick = function(event) {
        if(event.target == modal) {
          modal.style.display = "none";
          if(count != 0) {
          for(var i = 0; i < entryLis.length; i++) {
            entryLis[i].innerHTML = "";
          }
          pwds = "";
          count = 0;
        }
        }
      }
      /*开关键盘*/
      var openKey = document.querySelector(".paymentArea-Entry-Row");
      var switchOfKey = document.querySelector(".paymentArea-Keyboard h4");
      switchOfKey.addEventListener('click', function() {
        var KeyboardH = document.querySelector(".paymentArea-Keyboard").clientHeight;
        document.querySelector(".paymentArea-Keyboard").style.height = KeyboardH + "px";
        document.querySelector(".paymentArea-Keyboard").style.backgroundColor = "transparent";
        document.querySelector(".paymentArea-Keyboard h4").style.display = "none";
        document.querySelector(".paymentArea-Keyboard ul").style.display = "none";
      })
      openKey.addEventListener('click', function() {
        document.querySelector(".paymentArea-Keyboard").style.backgroundColor = "#fff";
        document.querySelector(".paymentArea-Keyboard h4").style.display = "block";
        document.querySelector(".paymentArea-Keyboard ul").style.display = "block";
      }) 

总结

以上所述是小编给大家介绍的JS实现仿微信支付弹窗功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例

    本文实例讲述了JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能.分享给大家供大家参考,具体如下: HTML部分: <div id="div">点击除开div的区域可以弹出弹窗</div> <div id="cover"></div> <div id="box">点击除开div和弹窗的区域可以关闭弹窗</div> CSS部分: #div{ /*设置z-index属性必须设置

  • Javascript中弹窗confirm与prompt的区别

    confirm 使用confirm,浏览器可以弹出一个确认框. 使用确认消息框可向用户问一个"是-或-否"问题,并且用户可以选择单击"确定"按钮或者单击"取消"按钮.confirm 方法的返回值为 true 或 false.该消息框也是模式对话框:用户必须在响应该对话框(单击一个按钮)将其关闭后,才能进行下一步操作. prompt  提示消息框提供了一个文本字段,用户可以在此字段输入一个答案来响应您的提示.该消息框有一个"确定"

  • 简述JS浏览器的三种弹窗

    1.alert:使用alert弹框提示信息,最后都会被转化为字符串输出(因为调用了toString这个方法).比如alert(1+1)弹出的结果应该是字符串形式的"2". 2.Confirm:在alert基础上增加了让用户选择性的操作(提供两个按钮:确定和取消) 比如:var  delin = confirm('你确定要删除吗?'); 这一句,当用户点击确定按钮的时候,我们接受到的结果是true,点击的是取消按钮的时候,我们接受到的结果是false,此后我们可以根据不同的结果做不同的处

  • javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)

    1.警告框alert() 复制代码 代码如下: alert("欢迎光临!"); 2.信息框confirm(),有取消,确定按钮 复制代码 代码如下: if (confirm("你同意吗?")) { alert("同意"); } else { alert("不同意"); } 3.提示框prompt(),用于提示用户输入一些文本 复制代码 代码如下: var result = prompt("您尊姓大名?",&

  • JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码

    1.首先写一个遮罩层div,然后再写一个弹窗的div <!-- 遮罩层 --> <div id="cover" style="background: #000; position: absolute; left: 0px; top: 0px; width: 100%; filter: alpha(opacity=30); opacity: 0.3; display: none; z-index: 2 "> </div> <!

  • javascript中常见的3种信息提示框(alert,prompt,confirm)

    1.警告提示框 alert("文本"). ex. function disp_alert() { alert("我是警告框!!"+'\n'+"hhah")//有折行 } [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 2.确认提示框(confirm,返回true或者false) function show_confirm() { var r=confirm("Press a button!"); if (r==tr

  • JS中confirm,alert,prompt函数使用区别分析

    window.alert:参数,只有一个,显示警告框的信息; 无返回值. <script> window.alert("确定.") </script> window.confirm : 参数就只有一个.显示提示框的信息. 按确定,返回true; 按取消返回false. <script> var bln = window.confirm("确定吗?"); alert(bln) </script> window.promp

  • JS中confirm,alert,prompt函数区别分析

    window.alert:参数,只有一个,显示警告框的信息; 无返回值. <script> window.alert("确定.") </script> window.confirm : 参数就只有一个.显示提示框的信息. 按确定,返回true; 按取消返回false. <script> var bln = window.confirm("确定吗?"); alert(bln) </script> window.promp

  • JS封装的模仿qq右下角消息弹窗功能示例

    本文实例讲述了JS封装的模仿qq右下角消息弹窗功能.分享给大家供大家参考,具体如下: 在我们的日常开发中,或者生活中,经常需要用到弹出窗.这里我们就用js模拟一下qq消息一样的弹出窗. 直接贴代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm

  • JS实现自定义弹窗功能

    众所周知,浏览器自带的原生弹窗很不美观,而且功能比较单一,绝大部分时候我们都会按照设计图自定义弹窗或者直接使用注入layer的弹窗等等.前段时间在 慕课网 上看到了一个自定义弹窗的实现,自己顺便就学习尝试写了下,下面是主要的实现代码并添加了比较详细的注释,分享出来供大家参考.(代码用了ES6部分写法如需兼容低版本浏览器请把相关代码转成es5写法,后面有时间更新为一个兼容性较好的es5版本) HTML部分:(没什么内容 放置一个按钮调用函数,js中调用实例即可供参考) <!DOCTYPE html

随机推荐