zoukankan      html  css  js  c++  java
  • 点击弹出图片模态框

    方法一:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"> 
    <title>菜鸟教程(runoob.com)</title> 
    <style>
    #myImg {
        border-radius: 5px;
        cursor: pointer;
        transition: 0.3s;
    }
    
    #myImg:hover {opacity: 0.7;}
    
    /* The Modal (background) */
    .modal {
        display: none; /* Hidden by default */
        position: fixed; /* Stay in place */
        z-index: 1; /* Sit on top */
        padding-top: 100px; /* Location of the box */
        left: 0;
        top: 0;
        width: 100%; /* Full width */
        height: 100%; /* Full height */
        overflow: auto; /* Enable scroll if needed */
        background-color: rgb(0,0,0); /* Fallback color */
        background-color: rgba(0,0,0,0.9); /* Black w/ opacity */
    }
    
    /* Modal Content (image) */
    .modal-content {
        margin: auto;
        display: block;
        width: 80%;
        max- 700px;
    }
    
    /* Caption of Modal Image */
    #caption {
        margin: auto;
        display: block;
        width: 80%;
        max- 700px;
        text-align: center;
        color: #ccc;
        padding: 10px 0;
        height: 150px;
    }
    
    /* Add Animation */
    .modal-content, #caption {    
        -webkit-animation-name: zoom;
        -webkit-animation-duration: 0.6s;
        animation-name: zoom;
        animation-duration: 0.6s;
    }
    
    @-webkit-keyframes zoom {
        from {-webkit-transform: scale(0)} 
        to {-webkit-transform: scale(1)}
    }
    
    @keyframes zoom {
        from {transform: scale(0.1)} 
        to {transform: scale(1)}
    }
    
    /* The Close Button */
    .close {
        position: absolute;
        top: 15px;
        right: 35px;
        color: #f1f1f1;
        font-size: 40px;
        font-weight: bold;
        transition: 0.3s;
    }
    
    .close:hover,
    .close:focus {
        color: #bbb;
        text-decoration: none;
        cursor: pointer;
    }
    
    /* 100% Image Width on Smaller Screens */
    @media only screen and (max- 700px){
        .modal-content {
            width: 100%;
        }
    }
    </style>
    </head>
    <body>
    
    <h2>图片模态框</h2>
    <p>本实例演示了如何结合 CSS 和 JavaScript 来一起渲染图片。</p><p>
    首先,我们使用 CSS 来创建 modal 窗口 (对话框), 默认是隐藏的。<p>
    <p>然后,我们使用 JavaScript 来显示模态窗口,当我们点击图片时,图片会在弹出的窗口中显示:</p>
    <img id="myImg" src="http://www.runoob.com/wp-content/uploads/2016/04/img_lights.jpg" alt="Northern Lights, Norway" width="300" height="200">
    
    <!-- The Modal -->
    <div id="myModal" class="modal">
      <span class="close">×</span>
      <img class="modal-content" id="img01">
      <div id="caption"></div>
    </div>
    
    <script>
    // 获取模态窗口
    var modal = document.getElementById('myModal');
    
    // 获取图片模态框,alt 属性作为图片弹出中文本描述
    var img = document.getElementById('myImg');
    var modalImg = document.getElementById("img01");
    var captionText = document.getElementById("caption");
    img.onclick = function(){
        modal.style.display = "block";
        modalImg.src = this.src;
        modalImg.alt = this.alt;
        captionText.innerHTML = this.alt;
    }
    
    // 获取 <span> 元素,设置关闭模态框按钮
    var span = document.getElementsByClassName("close")[0];
    
    // 点击 <span> 元素上的 (x), 关闭模态框
    span.onclick = function() { 
        modal.style.display = "none";
    }
    </script>
    
    </body>
    </html>
    View Code

    方法二(转):

    html:

    <!DOCTYPE html>
    <html lang="zh">
    <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>js图片和视频查看器插件 - 站长素材</title>
    
    <!--<link rel="stylesheet" type="text/css" href="css/normalize.css" />
    <link rel="stylesheet" href="css/main.css">-->
    
    </head>
    <body>
    <!--<div class="main">-->
        <div id="image_container"> <!--class="container"-->
          <!--<div class="flex">-->
            <!--<img src="img/photo1_thumb.jpg"/>
            <img src="img/photo7_thumb.jpg"/>
            <img src="img/photo3_thumb.jpg"/>-->
            <img src="img/photo2_thumb.jpg" caption="Example of an optional caption. You can put words here."/>
          <!--</div>-->
        </div>
    <!--</div>-->
    
    <script src="dist/BigPicture.js"></script>
    <script>
      (function() {
    
        function setClickHandler(id, fn) {
          document.getElementById(id).onclick = fn;
        }
    
        setClickHandler('image_container', function(e) {
          e.target.tagName === 'IMG' && BigPicture({
            el: e.target,
            imgSrc: e.target.src.replace('_thumb', '')
          });
        });
    
      })();
    </script>
    </body>
    </html>
    View Code

    BigPicture.js:

    // BigPicture.js | license MIT | henrygd.me/bigpicture
    (function() {
      var
        // assign window object to variable
        global = window,
        // trigger element used to open popup
        el,
        // set to true after first interaction
        initialized,
        // container element holding html needed for script
        container,
        // currently active display element (image, video, youtube / vimeo iframe container)
        displayElement,
        // popup image element
        displayImage,
        // popup video element
        displayVideo,
        // container element to hold youtube / vimeo iframe
        iframeContainer,
        // iframe to hold youtube / vimeo player
        iframeSiteVid,
        // store requested image source
        imgSrc,
        // button that closes the container
        closeButton,
        // youtube / vimeo video id
        siteVidID,
        // keeps track of loading icon display state
        isLoading,
        // timeout to check video status while loading
        checkVidTimeout,
        // loading icon element
        loadingIcon,
        // caption element
        caption,
        // caption content element
        captionText,
        // store caption content
        captionContent,
        // hide caption button element
        captionHideButton,
        // open state for container element
        isOpen,
        // used during close animation to avoid triggering timeout twice
        isClosing,
        // array of prev viewed image urls to check if cached before showing loading icon
        imgCache,
        // store whether remote image is already cached on request
        cached,
        // store whether image requested is remote or local
        remoteImage,
        // store animation opening callbacks
        animationStart,
        animationEnd,
        // set to true if user wants to hide loading icon
        noLoader,
        // Save bytes in the minified version
        doc = document,
        appendEl = 'appendChild',
        createEl = 'createElement',
        removeEl = 'removeChild',
        htmlInner = 'innerHTML',
        pointerEventsAuto = 'pointer-events:auto',
        cHeight = 'clientHeight',
        cWidth = 'clientWidth',
        listenFor = 'addEventListener',
        timeout = global.setTimeout,
        clearTimeout = global.clearTimeout;
    
    
      global.BigPicture = function(options) {
        // initialize called on initial open to create elements / style / event handlers
        initialized || initialize();
    
        // clear currently loading stuff
        if (isLoading) {
          clearTimeout(checkVidTimeout);
          removeContainer();
        }
    
        // store video id if youtube / vimeo video is requested
        siteVidID = options.ytSrc || options.vimeoSrc;
    
        // store optional callbacks
        animationStart = options.animationStart;
        animationEnd = options.animationEnd;
    
        // store whether user requests to hide loading icon
        noLoader = options.noLoader;
    
        // set trigger element
        el = options.el;
    
        // wipe existing remoteImage state
        remoteImage = false;
    
        // set caption if provided
        captionContent = el.getAttribute('caption');
        if (captionContent) {
          captionText[htmlInner] = captionContent;
          container[appendEl](caption);
        }
    
        // if vimeo or youtube video
        if (siteVidID) {
          toggleLoadingIcon(true);
          displayElement = iframeContainer;
          createIframe(!!options.ytSrc);
        }
        // if remote image
        else if (options.imgSrc) {
          remoteImage = true;
          imgSrc = options.imgSrc;
          cached = ~imgCache.indexOf(imgSrc);
          !cached && toggleLoadingIcon(true);
          displayElement = displayImage;
          displayElement.src = imgSrc;
        }
        // if direct video link
        else if (options.vidSrc) {
          toggleLoadingIcon(true);
          displayElement = displayVideo;
          displayElement.src = options.vidSrc;
          checkVid();
        }
        // local image / background image already loaded on page
        else {
          displayElement = displayImage;
          // get img source or element background image
          displayElement.src = el.tagName === 'IMG' ? el.src :
            global.getComputedStyle(el).backgroundImage.replace(/^url|[(|)|'|"]/g, '');
        }
    
        // add container to page
        container[appendEl](displayElement);
        doc.body[appendEl](container);
      };
    
    
      // create all needed methods / store dom elements on first use
      function initialize() {
    
        // return close button elements
        function createCloseButton() {
          var el = doc[createEl]('button');
          el.className = 'bp-x';
          el[htmlInner] = '×'
          return el;
        }
    
        // imgCache holds displayed image urls to prevent loader on cached images
        imgCache = [];
    
        // add style
        // if you want to tweak, grab from doc head & run through beautifier
        var style = doc[createEl]('STYLE');
        style[htmlInner] = '#bp_caption,#bp_container{bottom:0;left:0;right:0;position:fixed;opacity:0}#bp_container>*,.bp-x,#bp_loader{position:absolute;right:0}#bp_container{top:0;z-index:9999;background:rgba(0,0,0,.7);opacity:0;pointer-events:none;transition:opacity .35s}#bp_loader{top:0;left:0;bottom:0;display:-webkit-flex;display:flex;margin:0;cursor:wait;z-index:9}#bp_loader svg{40%;max-height:40%;margin:auto;' + webkitify('animation:', 'ldr .7s infinite linear;') + '}' + webkitifyKeyframes('keyframes ldr{to{' + webkitify('transform:', 'rotate(1turn);') + '}}') + '#bp_container img,#bp_sv,#bp_vid{max-height:96%;max-96%;top:0;bottom:0;left:0;margin:auto;box-shadow:0 0 3em rgba(0,0,0,.4);z-index:-1}#bp_sv{171vh}#bp_caption{font-size:.9em;padding:1.3em;background:rgba(15,15,15,.94);color:#fff;text-align:center;transition:opacity .3s}.bp-x{font-family:Arial;top:0;cursor:pointer;opacity:.8;font-size:3em;padding:0 .3em;color:#fff;background:transparent;border:0;text-shadow:0 0 2px #000}#bp_caption .bp-x{left:2%;top:auto;right:auto;bottom:100%;padding:0 .6em;background:#d74040;border-radius:2px 2px 0 0;font-size:2.3em;text-shadow:none}.bp-x:hover,.bp-x:focus{opacity:1}.bp-x:active{outline:0}@media (max-aspect-ratio:9/5){#bp_sv{height:53vw}}';
        doc.head[appendEl](style);
    
        // create container element
        container =  doc[createEl]('DIV');
        container.id = 'bp_container';
        container.onclick = close;
        closeButton = createCloseButton();
        container[appendEl](closeButton);
    
        // create display image element
        displayImage = doc[createEl]('IMG');
    
        // create display video element
        displayVideo = doc[createEl]('VIDEO');
        displayVideo.id = 'bp_vid';
        displayVideo.autoplay = true;
        displayVideo.controls = true;
        displayVideo.loop = true;
    
        // create caption elements
        caption = doc[createEl]('DIV');
        caption.id = 'bp_caption';
        captionHideButton = createCloseButton();
        captionHideButton.onclick = function() {
          changeCSS(caption, 'opacity:0');
          timeout(function() {
            captionContent = false;
            container[removeEl](caption);
          }, 300);
        }
        caption[appendEl](captionHideButton);
        captionText = doc[createEl]('SPAN');
        caption[appendEl](captionText);
    
        // create loading icon element
        loadingIcon = doc[createEl]('DIV');
        loadingIcon.id = 'bp_loader';
        loadingIcon[htmlInner] = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 399 399"><path d="M341 58.5C303 20.8 253 0 199.6 0 146.4 0 96.2 20.8 58.5 58.5 20.8 96.2 0 146.5 0 199.7 0 253 20.8 303.2 58.5 341c37.7 37.6 88 58.4 141.2 58.4 53.3 0 103.5-20.8 141.2-58.5 37.6-37.8 58.4-88 58.4-141.3 0-53.3-20.8-103.5-58.5-141.2zm-13 12.8c34.3 34.3 53.2 80 53.2 128.4h-41c0-77.4-63-140.4-140.5-140.4-4.6 0-9 .2-13.6.7V18.7c4.6-.4 9-.5 13.7-.5 48.5 0 94 18.8 128.4 53zM199.8 322c-67.4 0-122.2-55-122.2-122.3S132.3 77.5 199.7 77.5 322 132.3 322 199.7 267 322 199.6 322z"/></svg>';
    
        // create youtube / vimeo container
        iframeContainer = doc[createEl]('DIV');
        iframeContainer.id = 'bp_sv';
    
        // create iframe to hold youtube / vimeo player
        iframeSiteVid = doc[createEl]('IFRAME');
        iframeSiteVid.allowFullscreen = true;
        iframeSiteVid.onload = open;
        changeCSS(iframeSiteVid, 'border:0px;height:100%;100%');
        iframeContainer[appendEl](iframeSiteVid);
    
        // display image bindings for image load and error
        displayImage.onload = open;
        displayImage.onerror = open.bind(null, 'image');
    
        // adjust loader position on window resize
        global[listenFor]('resize', function() {
          isLoading && toggleLoadingIcon(true);
        });
    
        // close container on escape key press
        doc[listenFor]('keyup', function(e) {
          e.keyCode === 27 && isOpen && close(container);
        });
    
        // trap focus within conainer while open
        doc[listenFor]('focus', function(e) {
          if (isOpen && !container.contains(e.target)) {
            e.stopPropagation();
            closeButton.focus();
          }
        }, true);
    
        // all done
        initialized = true;
      }
    
    
      // return transform style to make full size display el match trigger el size
      function getRect() {
        var rect = el.getBoundingClientRect();
        var leftOffset = rect.left - (container[cWidth] - rect.width) / 2;
        var centerTop = rect.top - (container[cHeight] - rect.height) / 2;
        var scaleWidth = el[cWidth] / displayElement[cWidth];
        var scaleHeight = el[cHeight] / displayElement[cHeight];
        return webkitify('transform:', 'translate3D(' + leftOffset + 'px, ' +
          centerTop + 'px, 0) scale3D(' + scaleWidth + ', ' + scaleHeight + ', 0);');
      }
    
    
      // create youtube / vimeo video iframe
      function createIframe(isYoutube) {
        // create appropriate url for youtube or vimeo
        var url = isYoutube ?
          'www.youtube.com/embed/' + siteVidID + '?enablejsapi=1&html5=1&rel=0&showinfo=0&' :
          'player.vimeo.com/video/' + siteVidID + '?';
    
        // set iframe src to url
        iframeSiteVid.src = 'https://' + url + 'autoplay=1';
      }
    
      // timeout to check video status while loading
      // onloadeddata event doesn't seem to fire in less up-to-date browsers like midori & epiphany
      function checkVid() {
        if (displayElement.readyState === 4)
          open();
        else if (displayVideo.error)
          open('video');
        else
          checkVidTimeout = timeout(checkVid, 35);
      }
    
    
    // hide / show loading icon
      function toggleLoadingIcon(bool) {
        // don't show loading icon if noLoader is specified
        if (noLoader) return;
        // bool is true if we want to show icon, false if we want to remove
        // change style to match trigger element dimensions if we want to show
        bool && changeCSS(loadingIcon, 'top:' + el.offsetTop +
           'px;left:' + el.offsetLeft + 'px;height:' +
            el[cHeight] + 'px;' + el[cWidth] + 'px');
        // add or remove loader from DOM
        el.parentElement[bool ? appendEl : removeEl](loadingIcon);
        isLoading = bool;
      }
    
    
      // animate open of image / video; display caption if needed
      function open(err) {
        // hide loading spinner
        isLoading && toggleLoadingIcon();
    
        // execute animationStart callback
        animationStart && animationStart();
    
        // check if we have an error string instead of normal event
        if (typeof(err) === 'string') {
          removeContainer();
          return alert('Error: The requested ' + err + ' could not be displayed.');
        }
    
        // if remote image is loaded, add url to imgCache array
        (remoteImage && !cached) && imgCache.push(imgSrc);
    
        // transform displayEl to match trigger el
        changeCSS(displayElement, getRect());
    
        // fade in container
        changeCSS(container, 'opacity:1;' + pointerEventsAuto);
    
        // set animationEnd callback to run after animation ends (cleared if container closed)
        animationEnd = timeout(animationEnd, 410);
    
        isOpen = true;
    
        // enlarge displayEl, fade in caption if hasCaption
        timeout(function() {
          changeCSS(displayElement, webkitify('transition:', 'transform .35s;') + webkitify('transform:', 'none;'));
          captionContent && timeout(changeCSS.bind(null, caption, 'opacity:1'), 250);
        }, 60);
      }
    
    
      // close active display element
      function close(e) {
        var target = e.target;
        var clickEls = [caption, captionHideButton, displayVideo, captionText];
    
        // blur to hide close button focus style
        target && target.blur();
    
        // don't close if one of the clickEls was clicked or container is already closing
        if (isClosing || ~clickEls.indexOf(target)) {
          return;
        }
    
        // animate closing
        displayElement.style.cssText += getRect();
        changeCSS(container, pointerEventsAuto);
    
        // timeout to remove els from dom; use variable to avoid calling more than once
        timeout(removeContainer, 350);
    
        // clear animationEnd timeout
        clearTimeout(animationEnd);
    
        isOpen = false;
        isClosing = true;
      }
    
    
      // remove container / display element from the DOM
      function removeContainer() {
        // remove container from DOM & clear inline style
        doc.body[removeEl](container);
        container[removeEl](displayElement);
        changeCSS(container, '');
    
        // clear src of displayElement (or iframe if display el is iframe container)
        (displayElement === iframeContainer ? iframeSiteVid : displayElement)
          .removeAttribute('src');
    
        if (captionContent) {
          changeCSS(caption, '');
          container[removeEl](caption);
        }
        isClosing = false;
      }
    
    
      // style helper functions
      function changeCSS(element, newStyle) {
        element.style.cssText = newStyle;
      }
      function webkitify(prop, val) {
        var webkit = '-webkit-';
        var propVal = prop + val;
        return webkit + propVal + prop + webkit + val + propVal;
      }
      function webkitifyKeyframes(css) {
        return '@-webkit-' + css + '@' + css;
      }
    
    })();
    View Code

    ___________________

  • 相关阅读:
    Mybatis动态SQL
    Mybatis05__#和$的区别
    Mybatis04__输入参数/输出参数
    数据库中的字段和实体类中的字段不一致
    Mybatis中常用注解
    Mybatis03__配置文件简介
    Mybatis实现增、删、改操作时返回主键
    Mybatis04__CURD
    Mybatis02__Mybatis搭建
    lxrunoffline的使用
  • 原文地址:https://www.cnblogs.com/cuizhenyu/p/7364038.html
Copyright © 2011-2022 走看看