图片点击后出现模态框效果的实现

不少时候咱们在浏览图片时,会发现点击图片后,会弹出一个被点击图片的放大图片浮在页面上,占满整个窗口。这就是图片模态框效果。css

这个效果能够使用某些js库实现,如bpopupJs。可是在这里咱们使用纯js实现,可以更好理解效果原理和实现方法。html

一.实现思路

咱们点击小图片以后,图片模态框出现,同时图片模态框上有一个关闭按钮和图片的标题。
web

所以,咱们的实现思路就是:布局

  1. 图片模态框有大图片,关闭按钮,图片标题三部分。
  2. 将图片模态框隐藏,在点击小图片以后,模态框出现。
  3. 点击关闭按钮后,模态框隐藏。

二.HTML代码

首先,咱们的原始页面上有一个图片以下:
学习

 

HTML代码以下:动画

<h2>图片点击弹出模态框效果</h2>
<p>图片模态框很不错,是个值得学习的效果</p>
<img src="star.jpeg" id="real" alt="model test picture">

模态框的HTML代码以下:this

<div class="motai" id="mo">
    <span class="close" id="close">×</span>
    <img class="motaiimg" id="moimg">
    <div id="caption"></div>
</div>

三.css代码

咱们须要经过css设置模态框中各元素的表现效果同时将其隐藏起来,具体有以下几步:spa

1.模态框code

 

 #mo{
        display: none;/*隐藏模态框*/
        width: 100%;
        height: 100%;
        position: fixed;/*定位方式为固定定位*/
        overflow: auto;/*不滚动*/
        background-color: rgba(0,0,0,0.7);
        top: 0px;
        left: 0px;
        z-index: 1;/*置于页面图层之上*/
    }

 

 2.关闭按钮orm

  .close{
        font-size: 40px;
        font-weight: bold;
        position: absolute;
        top: 20px;
        right: 14%;
        color:#f1f1f1;
    }
  .close:hover,
  .close:focus{
        color:#bbb;
        cursor:pointer;
    }

 

 

3.模态框中图片

#moimg{
        display: block;/*图片表现为块*/
        margin:25px auto;/*图片居中对齐*/
        width: 60%;
        max-width: 750px;/*自适应布局*/
    }

 

4.图片标题

#caption{
        text-align: center;/*文本居中*/
        margin: 15px auto;
        width: 60%;
        max-height: 750px;
        font-size: 20px;
        color:#ccc;
    }

 

以上就是基本的模态框各元素的css代码,若是想实现点击后扩大的动画效果,能够增长如下代码:

    #moimg,#caption{
        -webkit-animation: first 1s;
        -o-animation: first 1s;
        animation: first 1s;
    }
    @keyframes first{
        from{transform: scale(0.1);}
        to{transform: scale(1);}
    }

 

经过以上步骤,咱们已经制做好了模态框页面。在使用js来完成交互效果就能够了。

四.js代码

js代码主要是图片和关闭按钮的点击交互,须要注意的是js代码须位于模态框HTML代码以后,js具体代码以下,:

var motai=document.getElementById('mo')
    var moimg=document.getElementById("moimg")
    var realimg=document.getElementById("real")
    var caption=document.getElementById("caption")

    realimg.onclick=function(){
        motai.style.display="block"
        moimg.src=this.src
        caption.innerHTML=this.alt
    }

    var span=document.getElementById("close");

    span.onclick=function(){
        motai.style.display="none";
    }

 

 

经过以上步骤,图片的模态框效果就实现了,

最后总的代码以下:

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>close</title>
    <style>
    #real{
        /*点击弹出模态框的图片*/
        margin: 30px;
        width: 250px;
        border-radius:6px;
    }
    #real:hover{
        opacity: 0.6;
    }
    #mo{
        display: none;/*隐藏*/
        width: 100%;
        height: 100%;
        position: fixed;
        overflow: auto;
        background-color: rgba(0,0,0,0.7);
        top: 0px;
        left: 0px;
        z-index: 1;
    }
    #moimg{
        display: block;
        margin:25px auto;
        width: 60%;
        max-width: 750px;
    }
    #caption{
        text-align: center;
        margin: 15px auto;
        width: 60%;
        max-height: 750px;
        font-size: 20px;
        color:#ccc;
    }
    #moimg,#caption{
        -webkit-animation: first 1s;
        -o-animation: first 1s;
        animation: first 1s;
    }
    @keyframes first{
        from{transform: scale(0.1);}
        to{transform: scale(1);}
    }
    .close{
        font-size: 40px;
        font-weight: bold;
        position: absolute;
        top: 20px;
        right: 14%;
        color:#f1f1f1;
    }
    .close:hover,
    .close:focus{
        color:#bbb;
        cursor:pointer;
    }
    @media only screen and(max-width:750px ) {
        #moimg{
            width: 100%;
        }
    }
    </style>
</head>
<body>

<h2>图片点击弹出模态框效果</h2>
<p>图片模态框很不错,是个值得学习的效果</p>
<img src="star.jpeg" id="real" alt="model test picture">

<!--图片模态框 -->
<div class="motai" id="mo">
    <span class="close" id="close">×</span>
    <img class="motaiimg" id="moimg">
    <div id="caption"></div>
</div>

<script>
    var motai=document.getElementById('mo')
    var moimg=document.getElementById("moimg")
    var realimg=document.getElementById("real")
    var caption=document.getElementById("caption")

    realimg.onclick=function(){
        motai.style.display="block"
        moimg.src=this.src
        caption.innerHTML=this.alt
    }

    var span=document.getElementById("close");

    span.onclick=function(){
        motai.style.display="none";
    }
</script>
</body>
</html>
相关文章
相关标签/搜索