vue iview多张图片大图预览、缩放翻转

本文实例为大家分享了vue iview多张图片大图预览,可缩放翻转,供大家参考,具体内容如下

先看效果:

完整项目代码地址

具体代码如下:

<style lang="less">

@import "../advanced-router.less";

</style>

<template>

<div class="balance-accounts">

<Row class-name="detail-row">

<Card>

<p slot="title">

回单照片

</p>

<div class="demo-upload-list" v-for="(item,index) in opPicsList" :key="index">

<img :src="item.url">

<div class="demo-upload-list-cover">

<Icon type="ios-search-span" @click.native="handleView(item.name)"></Icon>

</div>

</div>

</Card>

</Row>

</div>

</template>

<script>

import * as API from "@/api/adminApi";

import iconLeft from "@/images/icon-left.png";

import iconRight from "@/images/icon-right.png";

import iconClose from "@/images/icon-close.png";

import iconRotate from "@/images/icon-rotate.png";

import iconNoImages from "@/images/icon-no-images.png";

export default {

name: "shopping-info",

data() {

return {

opPicsList: [

{

name: "none",

url: iconNoImages

}

],

bigImage: null,

currentImageName: "",

currentRotate: 0

};

},

props: ['imageList'],

methods: {

loadDetail() {

let vm = this;

API.getFundClearDetail({ orderId: this.$route.query.orderId }).then(

data => {

if (data.resultObj.detail) {

if (data.resultObj.detail.opPics.length > 0) {

vm.opPicsList.splice(0, vm.opPicsList.length);

data.resultObj.detail.opPics

.split(",")

.forEach((element, index) => {

vm.opPicsList.push({

name: index,

url: element

});

});

}

}

}

);

},

rollImg() {

/* 获取当前页面的缩放比

若未设置zoom缩放比,则为默认100%,即1,原图大小

*/

var zoom = parseInt(this.bigImage.style.zoom) || 100;

/* event.wheelDelta 获取滚轮滚动值并将滚动值叠加给缩放比zoom

wheelDelta统一为±120,其中正数表示为向上滚动,负数表示向下滚动

*/

zoom += event.wheelDelta / 12;

/* 如果缩放比大于0,则将缩放比加载到页面元素 */

if (zoom >= 100) {

this.bigImage.style.zoom = zoom + "%";

}

/* 如果缩放比不大于0,则返回false,不执行操作 */

return false;

},

handleView(name) {

if (this.opPicsList[0].name == "none") {

this.$Message.error("没有图片哦~");

return;

}

this.currentImageName = name;

let elementArr = document.getElementsByClassName("showBigImage");

if (elementArr.length == 0) {

this.createShowImage();

}

for (let y = 0; y < this.opPicsList.length; y++) {

if (name == this.opPicsList[y].name) {

document.getElementById("bigImageE").src = this.opPicsList[y].url;

break;

}

}

},

closeImageShow() {

let elementArr = document.getElementsByClassName("showBigImage");

let main = document.getElementsByClassName("main");

let count = elementArr.length;

for (let i = 0; i < count; i++) {

main[0].removeChild(elementArr[0]);

}

},

rotateImage() {

let imageE = document.getElementById("bigImageE");

this.currentRotate = (this.currentRotate + 90) % 360;

imageE.style.transform =

imageE.style.transform.split(" ")[0] +

" rotate(" +

this.currentRotate +

"deg)";

},

toLeftImage() {

for (let y = 0; y < this.opPicsList.length; y++) {

if (this.currentImageName == this.opPicsList[y].name) {

if (y - 1 < 0) {

this.$Message.info("已经是最左边的一张图了哦~");

} else {

this.currentImageName = this.opPicsList[y - 1].name;

let imageE = document.getElementById("bigImageE");

imageE.src = this.opPicsList[y - 1].url;

// 加载完成执行

imageE.onload = function() {

if (imageE.naturalHeight < window.innerHeight) {

//图片高度小于屏幕则需要垂直居中处理

imageE.style.height = imageE.naturalHeight + "px";

imageE.style.top = "50%";

imageE.style.position = "relative";

imageE.style.transform = "translateY(-50%)";

imageE.style.zoom = "100%";

} else {

//需要去除前一张图片的效果

imageE.style.height = window.innerHeight + "px";

imageE.style.top = "0";

imageE.style.position = "relative";

imageE.style.transform = "translateY(0%)";

imageE.style.zoom = "100%";

}

};

}

break;

}

}

},

toRightImage() {

for (let y = 0; y < this.opPicsList.length; y++) {

if (this.currentImageName == this.opPicsList[y].name) {

if (y + 1 == this.opPicsList.length) {

this.$Message.info("已经是最右边的一张图了哦~");

} else {

this.currentImageName = this.opPicsList[y + 1].name;

let imageE = document.getElementById("bigImageE");

imageE.src = this.opPicsList[y + 1].url;

// 加载完成执行

imageE.onload = function() {

if (imageE.naturalHeight < window.innerHeight) {

//图片高度小于屏幕则需要垂直居中处理

imageE.style.height = imageE.naturalHeight + "px";

imageE.style.top = "50%";

imageE.style.position = "relative";

imageE.style.transform = "translateY(-50%)";

imageE.style.zoom = "100%";

} else {

//需要去除前一张图片的效果

imageE.style.height = window.innerHeight + "px";

imageE.style.top = "0";

imageE.style.position = "relative";

imageE.style.transform = "translateY(0%)";

imageE.style.zoom = "100%";

}

};

}

break;

}

}

},

createShowImage() {

//创建图片显示

let main = document.getElementsByClassName("main");

let topContainer = document.createElement("div");

let scrollContainer = document.createElement("div");

topContainer.style.position = "fixed";

topContainer.style.zIndex = "80";

topContainer.style.background = "rgba(0,0,0,0.80)";

topContainer.style.height = "100%";

topContainer.style.width = "100%";

topContainer.style.textAlign = "center";

topContainer.className = "showBigImage";

let imageContainer = document.createElement("div");

imageContainer.style.width = window.innerWidth + "px";

imageContainer.style.height = window.innerHeight + "px";

imageContainer.style.margin = "0 auto";

imageContainer.style.overflow = "auto";

imageContainer.style.top = "50%";

imageContainer.style.position = "relative";

imageContainer.style.transform = "translateY(-50%)";

let imageE = document.createElement("img");

imageE.src = iconNoImages;

imageE.title = "鼠标滚轮滚动可缩放图片";

imageE.id = "bigImageE";

// 加载完成执行

imageE.onload = function() {

if (imageE.naturalHeight < window.innerHeight) {

//图片高度小于屏幕则需要垂直居中处理

// imageE.style.width = "100%";

imageE.style.top = "50%";

imageE.style.position = "relative";

imageE.style.transform = "translateY(-50%)";

} else {

imageE.style.height = window.innerHeight + "px";

}

};

this.bigImage = imageE;

//添加鼠标滚轮事件缩放图片

if (imageE.addEventListener) {

// IE9, Chrome, Safari, Opera

imageE.addEventListener("mousewheel", this.rollImg, false);

// Firefox

imageE.addEventListener("DOMMouseScroll", this.rollImg, false);

} else {

// IE 6/7/8

imageE.attachEvent("onmousewheel", this.rollImg);

}

imageContainer.appendChild(imageE);

topContainer.appendChild(imageContainer);

main[0].appendChild(topContainer);

//创建点击左右浏览按钮

//左按钮

let imgLeft = document.createElement("img");

imgLeft.src = iconLeft;

imgLeft.style.zIndex = "101";

imgLeft.style.position = "fixed";

imgLeft.style.top = "50%";

imgLeft.style.transform = "translateY(-50%)";

imgLeft.style.left = "12%";

imgLeft.style.cursor = "pointer";

imgLeft.className = "showBigImage";

//添加鼠标点击事件切换图片

imgLeft.addEventListener("click", this.toLeftImage);

//右按钮

let imgRight = document.createElement("img");

imgRight.src = iconRight;

imgRight.style.zIndex = "101";

imgRight.style.position = "fixed";

imgRight.style.top = "50%";

imgRight.style.transform = "translateY(-50%)";

imgRight.style.right = "12%";

imgRight.style.cursor = "pointer";

imgRight.className = "showBigImage";

//添加鼠标点击事件切换图片

imgRight.addEventListener("click", this.toRightImage);

//大图片选转

let imgRotate = document.createElement("img");

imgRotate.id = "rotateImageBtn";

imgRotate.src = iconRotate;

imgRotate.style.zIndex = "102";

imgRotate.style.position = "fixed";

imgRotate.style.top = "5%";

imgRotate.style.right = "5%";

imgRotate.style.transform = "translateY(-50%)";

imgRotate.style.cursor = "pointer";

imgRotate.className = "showBigImage";

//添加鼠标点击事件旋转大图

imgRotate.addEventListener("click", this.rotateImage);

//关闭按钮

let imgClose = document.createElement("img");

imgClose.src = iconClose;

imgClose.style.zIndex = "101";

imgClose.style.position = "fixed";

imgClose.style.top = "5%";

imgClose.style.right = "1%";

imgClose.style.transform = "translateY(-50%)";

imgClose.style.cursor = "pointer";

imgClose.className = "showBigImage";

//添加鼠标点击事件关闭显示大图

imgClose.addEventListener("click", this.closeImageShow);

main[0].appendChild(imgLeft);

main[0].appendChild(imgRight);

main[0].appendChild(imgClose);

main[0].appendChild(imgRotate);

}

},

mounted() {

this.loadDetail();

}

};

</script>

可以看到,这个图片大图预览是用js创建的,而且是在main元素下添加的元素。因为这个是在ivew-admin框架下写的,其主要内容区的z-index是比菜单和header小的,所以如果在内容去写这个图片全局预览阴影区域无法覆盖整个页面。所以需要在main下加入元素。

组件方式:

<template>

<div>

</div>

</template>

<script>

import iconLeft from "@/images/icon-left.png";

import iconRight from "@/images/icon-right.png";

import iconClose from "@/images/icon-close.png";

import iconRotate from "@/images/icon-rotate.png";

import iconNoImages from "@/images/icon-no-images.png";

import {IMAGE_URL_PREFIX} from "@/config/constant";

export default {

data() {

return {

opPicsList: [

{

name: "none",

url: iconNoImages

}

],

imgName: "",

bigImage: null,

currentImageName: "",

currentRotate: 0

};

},

props: {

},

methods: {

loadImages(opPics) {

this.opPicsList.splice(0, this.opPicsList.length);

opPics.split(",").forEach((element, index) => {

this.opPicsList.push({

name: index,

url: IMAGE_URL_PREFIX + element

});

});

this.handleView("0");

},

rollImg() {

/* 获取当前页面的缩放比

若未设置zoom缩放比,则为默认100%,即1,原图大小

*/

var zoom = parseInt(this.bigImage.style.zoom) || 100;

/* event.wheelDelta 获取滚轮滚动值并将滚动值叠加给缩放比zoom

wheelDelta统一为±120,其中正数表示为向上滚动,负数表示向下滚动

*/

zoom += event.wheelDelta / 12;

/* 如果缩放比大于0,则将缩放比加载到页面元素 */

if (zoom >= 100) {

this.bigImage.style.zoom = zoom + "%";

}

/* 如果缩放比不大于0,则返回false,不执行操作 */

return false;

},

handleView(name) {

if (this.opPicsList[0].name == "none") {

this.$Message.error("没有图片哦~");

return;

}

this.currentImageName = name;

let elementArr = document.getElementsByClassName("showBigImage");

if (elementArr.length == 0) {

this.createShowImage();

}

for (let y = 0; y < this.opPicsList.length; y++) {

if (name == this.opPicsList[y].name) {

document.getElementById("bigImageE").src = this.opPicsList[y].url;

// debugger

// document.getElementById("bigImageE").width = this.opPicsList[y].url;

// document.getElementById("bigImageE").height = this.opPicsList[y].url;

// for (let i = 0; i < elementArr.length; i++) {

// elementArr[i].style.display = "block";

// }

break;

}

}

},

closeImageShow() {

let elementArr = document.getElementsByClassName("showBigImage");

let main = document.getElementsByClassName("main");

let count = elementArr.length;

for (let i = 0; i < count; i++) {

main[0].removeChild(elementArr[0]);

}

},

rotateImage() {

let imageE = document.getElementById("bigImageE");

this.currentRotate = (this.currentRotate + 90) % 360;

imageE.style.transform =

imageE.style.transform.split(" ")[0] +

" rotate(" +

this.currentRotate +

"deg)";

},

toLeftImage() {

for (let y = 0; y < this.opPicsList.length; y++) {

if (this.currentImageName == this.opPicsList[y].name) {

if (y - 1 < 0) {

this.$Message.info("已经是最左边的一张图了哦~");

} else {

this.currentImageName = this.opPicsList[y - 1].name;

let imageE = document.getElementById("bigImageE");

imageE.src = this.opPicsList[y - 1].url;

// 加载完成执行

imageE.onload = function() {

if (imageE.naturalHeight < window.innerHeight) {

//图片高度小于屏幕则需要垂直居中处理

imageE.style.height = imageE.naturalHeight + "px";

imageE.style.top = "50%";

imageE.style.position = "relative";

imageE.style.transform = "translateY(-50%)";

imageE.style.zoom = "100%";

} else {

//需要去除前一张图片的效果

imageE.style.height = window.innerHeight + "px";

imageE.style.top = "0";

imageE.style.position = "relative";

imageE.style.transform = "translateY(0%)";

imageE.style.zoom = "100%";

}

};

}

break;

}

}

},

toRightImage() {

for (let y = 0; y < this.opPicsList.length; y++) {

if (this.currentImageName == this.opPicsList[y].name) {

if (y + 1 == this.opPicsList.length) {

this.$Message.info("已经是最右边的一张图了哦~");

} else {

this.currentImageName = this.opPicsList[y + 1].name;

let imageE = document.getElementById("bigImageE");

imageE.src = this.opPicsList[y + 1].url;

// 加载完成执行

imageE.onload = function() {

if (imageE.naturalHeight < window.innerHeight) {

//图片高度小于屏幕则需要垂直居中处理

imageE.style.height = imageE.naturalHeight + "px";

imageE.style.top = "50%";

imageE.style.position = "relative";

imageE.style.transform = "translateY(-50%)";

imageE.style.zoom = "100%";

} else {

//需要去除前一张图片的效果

imageE.style.height = window.innerHeight + "px";

imageE.style.top = "0";

imageE.style.position = "relative";

imageE.style.transform = "translateY(0%)";

imageE.style.zoom = "100%";

}

};

}

break;

}

}

},

createShowImage() {

//创建图片显示

// let elementArr = document.getElementsByClassName("showBigImage");

// if (elementArr.length == 0) {

let main = document.getElementsByClassName("main");

let topContainer = document.createElement("div");

let scrollContainer = document.createElement("div");

topContainer.style.position = "fixed";

topContainer.style.zIndex = "80";

topContainer.style.background = "rgba(0,0,0,0.80)";

topContainer.style.height = "100%";

topContainer.style.width = "100%";

topContainer.style.textAlign = "center";

topContainer.className = "showBigImage";

// topContainer.style.display = "none";

let imageContainer = document.createElement("div");

imageContainer.style.width = window.innerWidth + "px";

imageContainer.style.height = window.innerHeight + "px";

imageContainer.style.margin = "0 auto";

imageContainer.style.overflow = "auto";

imageContainer.style.top = "50%";

imageContainer.style.position = "relative";

imageContainer.style.transform = "translateY(-50%)";

let imageE = document.createElement("img");

imageE.src = iconNoImages;

imageE.title = "鼠标滚轮滚动可缩放图片";

imageE.id = "bigImageE";

// 加载完成执行

imageE.onload = function() {

if (imageE.naturalHeight < window.innerHeight) {

//图片高度小于屏幕则需要垂直居中处理

// imageE.style.width = "100%";

imageE.style.top = "50%";

imageE.style.position = "relative";

imageE.style.transform = "translateY(-50%)";

} else {

imageE.style.height = window.innerHeight + "px";

}

};

// imageE.style.width = "100%";

// imageE.style.width = "475px";

// imageE.style.height = window.innerHeight + 'px';

// imageE.style.objectFit= "scale-down";

// imageE.style.height = "100%";

// imageE.style.top = "50%";

// imageE.style.position = "relative";

// imageE.style.transform = "translateY(-50%)";

this.bigImage = imageE;

//添加鼠标滚轮事件缩放图片

if (imageE.addEventListener) {

// IE9, Chrome, Safari, Opera

imageE.addEventListener("mousewheel", this.rollImg, false);

// Firefox

imageE.addEventListener("DOMMouseScroll", this.rollImg, false);

} else {

// IE 6/7/8

imageE.attachEvent("onmousewheel", this.rollImg);

}

imageContainer.appendChild(imageE);

topContainer.appendChild(imageContainer);

main[0].appendChild(topContainer);

//创建点击左右浏览按钮

//左按钮

let imgLeft = document.createElement("img");

imgLeft.src = iconLeft;

imgLeft.style.zIndex = "101";

imgLeft.style.position = "fixed";

imgLeft.style.top = "50%";

imgLeft.style.transform = "translateY(-50%)";

imgLeft.style.left = "12%";

imgLeft.style.cursor = "pointer";

imgLeft.className = "showBigImage";

//添加鼠标点击事件切换图片

imgLeft.addEventListener("click", this.toLeftImage);

//右按钮

let imgRight = document.createElement("img");

imgRight.src = iconRight;

imgRight.style.zIndex = "101";

imgRight.style.position = "fixed";

imgRight.style.top = "50%";

imgRight.style.transform = "translateY(-50%)";

imgRight.style.right = "12%";

imgRight.style.cursor = "pointer";

imgRight.className = "showBigImage";

//添加鼠标点击事件切换图片

imgRight.addEventListener("click", this.toRightImage);

//大图片选转

let imgRotate = document.createElement("img");

imgRotate.id = "rotateImageBtn";

imgRotate.src = iconRotate;

imgRotate.style.zIndex = "102";

imgRotate.style.position = "fixed";

imgRotate.style.top = "5%";

imgRotate.style.right = "5%";

imgRotate.style.transform = "translateY(-50%)";

imgRotate.style.cursor = "pointer";

imgRotate.className = "showBigImage";

//添加鼠标点击事件旋转大图

imgRotate.addEventListener("click", this.rotateImage);

//关闭按钮

let imgClose = document.createElement("img");

imgClose.src = iconClose;

imgClose.style.zIndex = "101";

imgClose.style.position = "fixed";

imgClose.style.top = "5%";

imgClose.style.right = "1%";

imgClose.style.transform = "translateY(-50%)";

imgClose.style.cursor = "pointer";

imgClose.className = "showBigImage";

//添加鼠标点击事件关闭显示大图

imgClose.addEventListener("click", this.closeImageShow);

// imgLeft.style.display = "none";

// imgRight.style.display = "none";

// imgClose.style.display = "none";

main[0].appendChild(imgLeft);

main[0].appendChild(imgRight);

main[0].appendChild(imgClose);

main[0].appendChild(imgRotate);

// main[0].style.textAlign = "center";

// this.imgName = name;

// this.visible = true;

// }

}

},

mounted() {

// this.loadImages();

}

};

</script>

以上是 vue iview多张图片大图预览、缩放翻转 的全部内容, 来源链接: utcz.com/z/344314.html

回到顶部