前端html网站页面图片点击放大

2023-06-25 23:13:52 浏览数 (2)

图片点击放大是非常常见的一项功能,一般网站上显示的都是缩略图,当点击缩略图之后,会在一个弹框中显示放大的图片,下面我们实战操作一遍

代码语言:javascript复制
 <script src="https://cdn.jsdelivr.net/npm/jquery@3.4.1/dist/jquery.min.js"></script>

css样式

代码语言:css复制
#outerdiv {
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0;
    left: 0;
    background: rgba(0, 0, 0, 0.3);
    display: none;
    z-index: 200;
}

html 代码

代码语言:html复制
<div id="outerdiv">
    <div id="innerdiv" style="position:absolute;">
        <img alt id="bigimg" style="box-shadow: 0 0 10px rgba(0,0,0,0.38)" src=""/>
    </div>
</div>

js逻辑实现

代码语言:javascript复制
<script>
    //点击图片,显示弹窗(放大图片)
    function imgShow(outerdiv, innerdiv, bigimg, _this) {
        let src = _this.attr("src"); //获取当前点击的img元素中的src属性
        $(bigimg).attr("src", src); //设置#bigimg元素的src属性
        /*获取当前点击图片的真实大小,并显示弹出层及大图*/
        $("<img/>").attr("src", src).on('load', function () {
            let windowW = $(window).width(); //获取当前窗口宽度
            let windowH = $(window).height(); //获取当前窗口高度
            let realWidth = this.width; //获取图片真实宽度
            let realHeight = this.height; //获取图片真实高度
            let imgWidth, imgHeight;
            let scale = 0.96; //缩放尺寸,当图片真实宽度和高度大于窗口宽度和高度时进行缩放
            if (realHeight > windowH * scale) { //判断图片高度
                imgHeight = windowH * scale; //如大于窗口高度,图片高度进行缩放
                imgWidth = imgHeight / realHeight * realWidth; //等比例缩放宽度
                if (imgWidth > windowW * scale) { //如宽度扔大于窗口宽度
                    imgWidth = windowW * scale; //再对宽度进行缩放
                }
            } else if (realWidth > windowW * scale) { //如图片高度合适,判断图片宽度
                imgWidth = windowW * scale; //如大于窗口宽度,图片宽度进行缩放
                imgHeight = imgWidth / realWidth * realHeight; //等比例缩放高度
            } else { //如果图片真实高度和宽度都符合要求,高宽不变
                if ((realWidth * 1.2) < windowW && (realHeight * 1.2) < windowH) {
                    imgWidth = realWidth * 1.2;
                    imgHeight = realHeight * 1.2;
                } else {
                    imgWidth = realWidth;
                    imgHeight = realHeight;
                }
            }
            $(bigimg).css("width", imgWidth); //以最终的宽度对图片缩放
            let w = (windowW - imgWidth) / 2; //计算图片与窗口左边距
            let h = (windowH - imgHeight) / 2; //计算图片与窗口上边距
            if (IsPC()) {
                $(innerdiv).css({
                    "top": h,
                    "left": w
                }); //设置#innerdiv的top和left属性
            } else {
                $(innerdiv).css({
                    "top": "50%",
                    "left": "50%"
                }); //设置#innerdiv的top和left属性
                $(innerdiv).css({
                    "transform": "translateX(-50%) translateY(-50%)"
                });
            }
            $(outerdiv).fadeIn(500); //淡入显示#outerdiv及img
        });

        $(outerdiv).click(function () { //再次点击淡出消失弹出层
            $(this).fadeOut(300);
        });
    }

    function IsPC() {
        var userAgentInfo = navigator.userAgent;
        var Agents = [
            "Android", "iPhone",
            "SymbianOS", "Windows Phone",
            "iPad", "iPod"
        ];
        var flag = true;
        for (var v = 0; v < Agents.length; v  ) {
            if (userAgentInfo.indexOf(Agents[v]) > 0) {
                flag = false;
                break;
            }
        }
        return flag;
    };

    $(".article-container img").click(function () { //单击图片放大
        console.log("图片放大");
        let _this = $(this); //将当前的pimg元素作为_this传入函数
        imgShow("#outerdiv", "#innerdiv", "#bigimg", _this);
    });

</script>

0 人点赞