JS實(shí)現(xiàn)圖片點(diǎn)擊后出現(xiàn)模態(tài)框效果
很多時(shí)候我們?cè)跒g覽圖片時(shí),會(huì)發(fā)現(xiàn)點(diǎn)擊圖片后,會(huì)彈出一個(gè)被點(diǎn)擊圖片的放大圖片浮在頁(yè)面上,占滿整個(gè)窗口。這就是圖片模態(tài)框效果。
這個(gè)效果可以使用某些js庫(kù)實(shí)現(xiàn),如bpopupJs。但是在這里我們使用純js實(shí)現(xiàn),能夠更好理解效果原理和實(shí)現(xiàn)方法。
一.實(shí)現(xiàn)思路
我們點(diǎn)擊小圖片之后,圖片模態(tài)框出現(xiàn),同時(shí)圖片模態(tài)框上有一個(gè)關(guān)閉按鈕和圖片的標(biāo)題。
因此,我們的實(shí)現(xiàn)思路就是:
圖片模態(tài)框有大圖片,關(guān)閉按鈕,圖片標(biāo)題三部分。
將圖片模態(tài)框隱藏,在點(diǎn)擊小圖片之后,模態(tài)框出現(xiàn)。
點(diǎn)擊關(guān)閉按鈕后,模態(tài)框隱藏。
二.HTML代碼
首先,我們的原始頁(yè)面上有一個(gè)圖片如下:

HTML代碼如下:
<h2>圖片點(diǎn)擊彈出模態(tài)框效果</h2> <p>圖片模態(tài)框很不錯(cuò),是個(gè)值得學(xué)習(xí)的效果</p> <img src="star.jpeg" id="real" alt="model test picture">
模態(tài)框的HTML代碼如下:
<div class="motai" id="mo"> <span class="close" id="close">×</span> <img class="motaiimg" id="moimg"> <div id="caption"></div> </div>
三.css代碼
我們需要通過(guò)css設(shè)置模態(tài)框中各元素的表現(xiàn)效果同時(shí)將其隱藏起來(lái),具體有如下幾步:
1.模態(tài)框
#mo{
display: none;/*隱藏模態(tài)框*/
width: 100%;
height: 100%;
position: fixed;/*定位方式為固定定位*/
overflow: auto;/*不滾動(dòng)*/
background-color: rgba(0,0,0,0.7);
top: 0px;
left: 0px;
z-index: 1;/*置于頁(yè)面圖層之上*/
}
2.關(guān)閉按鈕
.close{
font-size: 40px;
font-weight: bold;
position: absolute;
top: 20px;
right: 14%;
color:#f1f1f1;
}
.close:hover,
.close:focus{
color:#bbb;
cursor:pointer;
}
3.模態(tài)框中圖片
#moimg{
display: block;/*圖片表現(xiàn)為塊*/
margin:25px auto;/*圖片居中對(duì)齊*/
width: 60%;
max-width: 750px;/*自適應(yīng)布局*/
}
4.圖片標(biāo)題
#caption{
text-align: center;/*文本居中*/
margin: 15px auto;
width: 60%;
max-height: 750px;
font-size: 20px;
color:#ccc;
}
以上就是基本的模態(tài)框各元素的css代碼,如果想實(shí)現(xiàn)點(diǎn)擊后擴(kuò)大的動(dòng)畫效果,可以增加以下代碼:
#moimg,#caption{
-webkit-animation: first 1s;
-o-animation: first 1s;
animation: first 1s;
}
@keyframes first{
from{transform: scale(0.1);}
to{transform: scale(1);}
}
通過(guò)以上步驟,我們已經(jīng)制作好了模態(tài)框頁(yè)面。在使用js來(lái)完成交互效果就可以了。
四.js代碼
js代碼主要是圖片和關(guān)閉按鈕的點(diǎn)擊交互,需要注意的是js代碼須位于模態(tài)框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";
}
通過(guò)以上步驟,圖片的模態(tài)框效果就實(shí)現(xiàn)了,

最后總的代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>close</title>
<style>
#real{
/*點(diǎn)擊彈出模態(tài)框的圖片*/
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>圖片點(diǎn)擊彈出模態(tài)框效果</h2>
<p>圖片模態(tài)框很不錯(cuò),是個(gè)值得學(xué)習(xí)的效果</p>
<img src="star.jpeg" id="real" alt="model test picture">
<!--圖片模態(tài)框 -->
<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>
以上所述是小編給大家介紹的JS實(shí)現(xiàn)圖片點(diǎn)擊后出現(xiàn)模態(tài)框效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- AngularJs 彈出模態(tài)框(model)
- js實(shí)現(xiàn)簡(jiǎn)單模態(tài)框?qū)嵗?/a>
- Vue.js彈出模態(tài)框組件開(kāi)發(fā)的示例代碼
- js利用事件的阻止冒泡實(shí)現(xiàn)點(diǎn)擊空白模態(tài)框的隱藏
- angularJS模態(tài)框$modal實(shí)例代碼
- AngularJS中使用ngModal模態(tài)框?qū)嵗?/a>
- bootstrap Validator 模態(tài)框、jsp、表單驗(yàn)證 Ajax提交功能
- AngularJS模態(tài)框模板ngDialog的使用詳解
- 原生js實(shí)現(xiàn)簡(jiǎn)單的模態(tài)框示例
- JavaScript+CSS實(shí)現(xiàn)模態(tài)框效果
相關(guān)文章
微信小程序?qū)崿F(xiàn)獲取小程序碼和二維碼java接口開(kāi)發(fā)
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)獲取小程序碼和二維碼java接口開(kāi)發(fā),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
JavaScript 獲取 URL 中參數(shù)值的方法詳解(最新整理)
本文將詳細(xì)介紹幾種在 JavaScript 中獲取 URL 參數(shù)值的方法,包括現(xiàn)代瀏覽器支持的 URLSearchParams、正則表達(dá)式解析以及自定義函數(shù)解析方案,并討論各自的優(yōu)缺點(diǎn)及適用場(chǎng)景,感興趣的朋友一起看看吧2025-04-04
JS實(shí)現(xiàn)求出一個(gè)字符串中最多出現(xiàn)的字符和個(gè)數(shù)
這篇文章主要為大家介紹了字符串中最多的重復(fù)字符的計(jì)算代碼,需要的朋友可以參考下2007-07-07
JavaScript實(shí)現(xiàn)重置表單(reset)的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)重置表單(reset)的方法,涉及javascript中reset()方法的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
微信小程序上傳帖子的實(shí)例代碼(含有文字圖片的微信驗(yàn)證)
這篇文章主要介紹了小程序上傳帖子(含有文字圖片的微信驗(yàn)證)的實(shí)例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼
這篇文章主要介紹了JavaScript中l(wèi)ayim之整合右鍵菜單的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
微信小程序如何修改radio和checkbox的默認(rèn)樣式和圖標(biāo)
這篇文章主要介紹了微信小程序修改radio和checkbox的默認(rèn)樣式和圖標(biāo),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
JS實(shí)現(xiàn)拖動(dòng)滾動(dòng)條評(píng)分的效果代碼分享
本文給大家基于js實(shí)現(xiàn)拖動(dòng)滾動(dòng)條評(píng)分效果,在項(xiàng)目開(kāi)發(fā)中經(jīng)??梢杂玫降?,大家可以更加需要適當(dāng)?shù)奶砑有薷?,?duì)js評(píng)分效果感興趣的朋友一起看看吧2016-09-09
JavaScript 實(shí)現(xiàn)鼠標(biāo)拖動(dòng)元素實(shí)例代碼
這篇文章主要介紹了JavaScript 實(shí)現(xiàn)鼠標(biāo)拖動(dòng)元素實(shí)例代碼,需要的朋友可以參考下2014-02-02
uniapp中使用?uni.navigateBack()?返回上級(jí)頁(yè)面并傳參的方法
最近遇到這樣的需求在A頁(yè)面中通過(guò)跳轉(zhuǎn)到B頁(yè)面,在B頁(yè)面中處理的數(shù)據(jù),需要跳轉(zhuǎn)回A頁(yè)面供其使用,本文給大家分享uniapp中使用?uni.navigateBack()?返回上級(jí)頁(yè)面并傳參的操作方法,感興趣的朋友一起看看吧2023-10-10

