JS

使用原生JS加CSS样式实现图片点击放大缩小功能

Posted by 石玉军 on 2018-07-26

前几天网站测试的时候发现了博客中的图片的有的太小了看不清楚,随想到了使用一个图片放大的插件,不过度娘了好几分钟以后实在没有找到比较优雅的。然后就自己写了一个,在这里分享给大家。

对比我度娘的结果,此功能实现没有基于任何框架,原生js、css和html就可以实现,相信聪明的你看了就明白了。

因为我的网站不是博客么,当我的一篇博客从后台查询出来的时候,有一个字段会记录博客的正文。我们需要放大的图片就在这个正文里了。

首先我先调用了一个方法为我的正文做了一下转换:

1
2
3
4
imgHander(context) {
var subStr=new RegExp('<img','ig');
return context.replace(subStr, "<img onclick='picBig(this)' ");
}

我给正文中所有的img标签都添加了一个picBig函数,这个参数传递的是这个图片本身,那么这个函数又是怎么实现的呢?

1
2
3
4
5
6
7
function picBig(img) {
var i=img.currentSrc;
var v = document.getElementById('divCenter');
var bigImg = document.getElementById('bigImg');
bigImg.src=i;
v.style.display = "block";
}

大致上呢,这个函数获取了调用者的图片地址,然后给了一个id为bigImg的img标签,然后呢又把一个di为divCenter的东西给设置了display

为显示。那么这两个东西又是什么呢,接着忘下看:

1
2
3
4
5
<div id="divCenter" align="center"
style="position: absolute; display: none; width: 100%; height: 100%; overflow:auto; position:fixed;z-index:9999;margin-top: 30px;">
<img id="bigImg" class="bigImg" onclick="picClose();"
src="" style="width:90%;"/>
</div>

看到这里相信你已经明白了,这个div会显示出来,并且我们刚才点击的图片大小会变成宽度为90%,其实我们的图片放大功能已经实现了不是么。接着图片缩小,是不是very easy,隐藏这个div就是了,点击图片时调用picClose函数。

1
2
3
4
function picClose() {
var v = document.getElementById('divCenter');
v.style.display = "none";
}

功能已经完全实现了,如果你不着急走的话就在附送你两个小样式。

1
2
3
4
5
6
`.blog img {
cursor:url(img/big.png),auto;
}
.bigImg {
cursor:url(img/small.png),auto;
}

上方两个样式呢,第一个是当我们鼠标放在需要放大的图片上时会显示一个放大镜,第二个就是图片放大以后鼠标放上就会显示一个缩小的样式,在这里顺便把这两个icon附上。图片图片