利用JQUERY点击放大图片恢复,支持滚动条,禁用body滚动
网上的教程大多都零散不适应,插件也都参差不齐,病毒、广告四处潜伏,还是自力更生的好。
说下原理:
- 全部设置只是需要一个
$('.post img').each(function(){
图片选择器即可; - 根据提供选择器选择图片,判断图片是否被缩小了,如果被缩小,增加class样式
zoomin
,并设置css样式cursor: zoom-in;
,鼠标指针为一个放大图标;正常判断宽度即可,这里长款都加入了判断。 - 然后根据增加的class操作点击行为。点击后在图片后面增加元素
<div class="zoom">
和关闭图标等,只是一个显示,实际点哪里都能关闭图片。禁用系统滚动条,图片支持大图滚动条,就是实际图片尺寸显示。 - 点击新增元素
zoom
,则关闭图片并且自行删除zoom
元素,同时解锁body
的滚动条。 - 整个流程就这么回事。
第一次打开不知道为什么有时候zoomin加不上,导致无法执行
把$('.post img').each(function(){
换成$('.post img').on('load',function () {
就可以了。
js部分
//图片点击放大
$(document).ready(function(){
$('.post img').each(function(){ //图片选择器
var screenImage = $(this);
var theImage = new Image(); //新建图片容器
theImage.src = screenImage.attr("src"); //新容器赋值图片地址
if((theImage.width > screenImage.width()) || (theImage.height > screenImage.height()) ) { //判断长宽是否被缩小了
$(this).addClass('zoomin'); //如果被缩小就增加zoomin
};
});
});
$(document).on('click', '.zoomin', function() {
var top = $(document).scrollTop(); //获取滚动条距离顶部
$(this).after('<div class="zoom"><span class="close-zoom">×</span><img src="'+$(this).attr("src")+'"></div>'); //新增元素,包含关闭,图片地址等
$('.zoom').animate({opacity:'1'}); //透明度到1,设置渐进动画
$(document).on('scroll.unable',function (e) { //滚动到顶部的距离始终保持一个值,相当于禁用
$(document).scrollTop(top);
});
});
$(document).on('click', '.zoom', function() {
$(this).animate({opacity:'0'},function(){ //透明度到1,然后自行删除,有个渐进的过程
$(this).remove();
});
$(document).unbind("scroll.unable"); //解锁滚动条
});
css部分
.zoom {
position: fixed!important;
display: flex;
top: 0;
left: 0;
bottom: 0;
right: 0;
opacity: 0;
width: 100%;
height: 100%;
z-index: 100;
background: rgba(0,0,0,.8);
transition: all .3s ease-in-out;
overflow: auto;
}
.zoom::-webkit-scrollbar {
width: 10px;
height: 10px;
}
.zoom::-webkit-scrollbar-thumb {
background-color: #666;
border: 3px solid #333;
border-radius: 3px;
}
.zoom::-webkit-scrollbar-thumb:hover {
border-width: 2px;
background-color: #999;
}
.zoom::-webkit-scrollbar-track {
background: transparent;
}
.zoom img {
margin: auto;
padding: 2em;
background: transparent;
transition: all .3s ease;
cursor: zoom-out;
max-width: fit-content;
}
.close-zoom {
font-size: 3em;
color: #eee;
line-height: 1;
width: 1em;
text-align: center;
border-radius: 50%;
position: fixed;
top: .5em;
right: .5em;
background: rgba(155,155,155,.6);
cursor: pointer;
}
.zoomin {
cursor: zoom-in;
}
最后修订于 2020-10-30 00:49:17
- 上一篇 禁用滚动条并保持显示
- 下一篇 加班深夜,只为感动自己