JS點(diǎn)擊縮略圖整屏居中放大圖片效果
需要實(shí)現(xiàn)的效果圖:
今天開(kāi)發(fā)的時(shí)候,遇到要點(diǎn)擊縮略圖之后居中顯示圖片的大圖查看(大致效果如上圖所示)~想了好幾種實(shí)現(xiàn)方式,最開(kāi)始的時(shí)候,是想通過(guò)animate來(lái)點(diǎn)擊圖片進(jìn)行顯示,可是后來(lái)當(dāng)我想要讓放大的圖片進(jìn)行居中顯示和點(diǎn)擊別的地方隱藏已顯示的大圖的時(shí)候,才發(fā)現(xiàn)實(shí)現(xiàn)起來(lái)有難度。
1 第一張點(diǎn)擊圖片將圖片放大
下面將這種方式也貼出來(lái),供自己參考(萬(wàn)一有需要的小伙伴正好需要這樣的功能呢):
<div> <img class="dialog" src="xxx.jpg"> <div id="dialog_large_image"></div> </div> <script type="text/javascript"> $(function () { $("img.dialog").click(function() { var large_image = '<img src= ' + $(this).attr("src") + '></img>'; $('#dialog_large_image').html($(large_image).animate({ height: '50%', width: '50%' }, 500)); }); }); </script>
上述代碼實(shí)現(xiàn)的效果如下圖所示:
這個(gè)是最基本的漸變的效果實(shí)現(xiàn)。
- 2 第二種點(diǎn)擊圖片全屏居中顯示(推薦這種實(shí)現(xiàn)方式)
HTML的樣式部分:
代碼部分用到了字符串的拼接(可以以后做參考用):
重要的是第二行var html = ...
for (var i in result_array) { var html = ''; var html = '<div id="dialog_pic"><div class="dialog-body"><img src="' + result_array[i]['photo_url'] + '?imageView2/1/w/128/h/128"></div></div> <div class="waterfall_stream_pic"><div class="item">'; if (result_array[i]['photo_url']) { html += '<img class="zoom" src="' + result_array[i]['photo_url'] + '?imageView2/1/w/128/h/128">'; } html += '<div><span>' + result_array[i]['final_score'] + '</span><span>(' + result_array[i]['baby_gender'] + '寶' + ')</span><p>' + parseInt(result_array[i]['age_in_month']/12) + '周歲'+ result_array[i]['age_in_month']%12 + '個(gè)月</p>'; html += '</div></div></div>'; $container_pics.append(html); } }
CSS 樣式部分(點(diǎn)擊縮略圖顯示的一些代碼,很重要~注意z-index: 100;這個(gè)屬性值的作用)
#dialog_pic { position: fixed; top: 0; bottom: 0; left: 0; right: 0; background: rgba(0,0,0,0.65); z-index: 100; display: none; .dialog-body { width: 100%; max-width: 250px; max-height: 300px; margin: 0 auto; padding: 10px; border-radius: 5px; background: white; overflow: auto; margin-top: 283px; img { width: 100%; } } }
這里必須使用on事件來(lái)獲取元素的點(diǎn)擊事件,onclick不產(chǎn)生作用(為什么不產(chǎn)生作用,請(qǐng)看上一篇文章的關(guān)于on 和onclick 的說(shuō)明)
// pic zoom $(function() { //獲取縮略圖的點(diǎn)擊事件,然后將大圖片展示出來(lái)(樣式里默認(rèn)顯示為```none```) $('.result_pics').on('click', 'img.zoom', function() { var $dialog = $('#dialog_pic'); //這里的dialog_pic是整個(gè)大圖的顯示區(qū)域(請(qǐng)注意,這里之只有采用變量賦值的方式是為了
下面的代碼看起來(lái)很簡(jiǎn)潔,方便自己,方便他人)
$dialog.show(); // outerHeight聲明了整個(gè)窗口的高度 // 此處的代碼通過(guò)上面的圖片,我已經(jīng)標(biāo)注出來(lái)了相應(yīng)的區(qū)域部分。整個(gè)頁(yè)面減去大圖片顯示區(qū)域從上到圖片的最底邊所產(chǎn)生的距離,然后除2就可以實(shí)現(xiàn)圖片的放大居中了。 var marginTop = ($dialog.outerHeight() - $('.dialog-body', $dialog).outerHeight()) / 2; $('.dialog-body', $dialog).css({ marginTop: marginTop }); }); // 點(diǎn)擊顯示的大圖,觸發(fā)事件,當(dāng)觸發(fā)當(dāng)前頁(yè)面內(nèi)里任何處位置,就會(huì)隱藏顯示的大圖 $('.result_pics').on('click', '#dialog_pic', function() { $(this).hide(); }); });
至此,點(diǎn)擊縮略圖顯示大圖的功能到這里基本實(shí)現(xiàn)。但是這里有一個(gè)bug就是放大的圖片有失真,不清晰(注:明天排查下是什么原因?qū)е碌膥)
解決上面存留的bug:(bug出現(xiàn)了2個(gè),一個(gè)是點(diǎn)擊放大的圖片失真,另一個(gè)是原圖放大之后圖片會(huì)旋轉(zhuǎn))
1.點(diǎn)擊放大的圖片失真(這個(gè)是我一開(kāi)始沒(méi)放原圖<img src="' + result_array[i]['photo_url'] ">即后面不帶參數(shù))
var html = '<div id="dialog_pic"><div class="dialog-body"><img src="' + result_array[i]['photo_url'] + '?imageMogr/auto-orient"></div></div> <div class="waterfall_stream_pic"><div class="item">';
2.解決旋轉(zhuǎn)的方案(這個(gè)參數(shù)一般就是為了解決客戶端IOS/Android圖片橫豎屏的問(wèn)題,當(dāng)然放在網(wǎng)頁(yè)端應(yīng)用也是OK的):
imageMogr/auto-orient
至此,點(diǎn)擊縮略圖顯示大圖的功能實(shí)現(xiàn),已全部OK ~
以上所述是小編給大家介紹的JS點(diǎn)擊縮略圖整屏居中放大圖片效果,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript利用canvas實(shí)現(xiàn)鼠標(biāo)跟隨特效
canvas是一個(gè)很神奇的玩意兒,比如畫(huà)表格、畫(huà)海報(bào)圖都要用canvas去做。本文就來(lái)利用canvas制作個(gè)簡(jiǎn)單的鼠標(biāo)跟隨特效,快跟隨小編一起學(xué)習(xí)一下吧2022-10-10實(shí)現(xiàn)lightBox時(shí)的樣式與行為分離減少JS
本教程旨在實(shí)現(xiàn)lightBox時(shí)的樣式與行為分離,減少JS在各方面(全屏遮蔽、ie6中遮蔽select、雙向居中、高度自適應(yīng)內(nèi)容等)的工作。2009-07-07js實(shí)現(xiàn)添加可信站點(diǎn)、修改activex安全設(shè)置,禁用彈出窗口阻止程序
下面小編就為大家?guī)?lái)一篇js實(shí)現(xiàn)添加可信站點(diǎn)、修改activex安全設(shè)置,禁用彈出窗口阻止程序。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08微信小程序開(kāi)發(fā)之點(diǎn)擊按鈕退出小程序的實(shí)現(xiàn)方法
這篇文章主要介紹了微信小程序開(kāi)發(fā)之點(diǎn)擊按鈕退出小程序的實(shí)現(xiàn)方法,本恩通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04JavaScript時(shí)間戳與時(shí)間日期間相互轉(zhuǎn)換
今天做項(xiàng)目遇到這樣的問(wèn)題,要將獲取到的時(shí)間轉(zhuǎn)換為時(shí)間戳,通過(guò)查閱相關(guān)資料,問(wèn)題順利解決,下面小編把具體實(shí)現(xiàn)代碼分享到腳本之家平臺(tái),需要的朋友參考下2017-12-12typescript編寫(xiě)微信小程序創(chuàng)建項(xiàng)目的方法
這篇文章主要介紹了typescript編寫(xiě)微信小程序創(chuàng)建項(xiàng)目的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01