原生js——点击图片放大预览

    技术2024-10-26  23

    目的:点击图片时发大预览效果

    html:

    <body id="app"> <div class="row" id="video"> <div class="col-xs-12 col-sm-3 image center-block"> <img src="./images/feedback/01.jpg" alt="" /> </div> <div class="col-xs-12 col-sm-3 image"> <img src="./images/feedback/02.jpg" alt="" /> </div> <div class="col-xs-12 col-sm-3 image"> <img src="./images/feedback/03.jpg" alt="" /> </div> <div class="col-xs-12 col-sm-3 image"> <img src="./images/feedback/04.jpg" alt="" /> </div> </div> <!-- 作用:将放大预览的图片添加到里面并显示--> <div id="canvas" class="canva-image"> </div> </body>

    css:

    .preview::before{ content: ''; display: block; position: fixed; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 10; } .canva-image{ position: fixed; top: 15%; left: 38%; z-index: 12; } .clear{ position: absolute; top: 0; right: 0; cursor: pointer; text-shadow: 1px 1px 1px gray; } .clear:active{ transform: translateY(2px); }

    js:

    /** 首先创建放大预览的图片元素和关闭样式的span, 然后获取用于放大预览图片的父元素, 和获取所有图片元素,并且获取id为app的body元素 */ var img = document.createElement("img"); var span = document.createElement('span'); var cav = document.getElementById('canvas'); var images = document.getElementById('video').children; var body = document.getElementById('app'); // 关闭样式,因为用的是调用了bootstrap框架的图标 // 不想调用框架可以用图片代替 span.className ="glyphicon glyphicon-remove clear"; span.title = "关闭图片"; // 由于获取的值都是节点,所以需要转换成数组形式,然后遍历 // es6语法,...是展开运算符,可以将值转换成数组,我只能大概理解到这 images = [...images]; // forEach数组循环事件,将数组中所有的值遍历出来 images.forEach(v =>{ // 遍历出来的值是数组,获取他的子元素,就是要点击的图片 let vImage = v.children[0]; // 图片点击事件 vImage.addEventListener('click', (e) =>{ // 获取到点击图片的src值并赋值给刚才创建好的图片元素 img.src = e.target.src; // 并且添加到父元素中 cav.appendChild(img); cav.appendChild(span); // 而且给body添加样式,因为需要屏幕变暗,所以这样设置 body.className = "preview"; }); }); // 移除放大预览的元素,点击关闭时 span.addEventListener('click', () =>{ // 移除子元素 cav.removeChild(img); cav.removeChild(span); // class为空 body.className = ""; });
    Processed: 0.015, SQL: 9