首页 > 其他分享 >Viewer.js实现移动端图片预览,旋转

Viewer.js实现移动端图片预览,旋转

时间:2023-03-02 17:34:50浏览次数:34  
标签:false 预览 Viewer js current viewer true

1、安装
npm install v-viewer --save
2、main.js中引入
import Viewer from 'v-viewer'
import 'viewerjs/dist/viewer.css'

// 如果需要修改viewer的css 可以创建一个css文件并在main.js中引入
import '@/styles/viewerEdit.css'
3、页面使用,这里需求是 支持轮播图支持大图预览
(1)页面引入

点击查看代码
import $ from "jquery";
import Viewer from "v-viewer/src/component.vue"
export default {
	name: "",
	components: {
		Video,
		Viewer
	},
	//避免点击上一步的时候 viewer.js 依旧没有关闭
	beforeRouteLeave(to, from, next) {
		this.$viewer.hide() // 关闭图片预览
	}
}

(2)html代码

点击查看代码
<template>
	<div>
		<div class="ppt_box" v-if="type === 'f'">
		// viewer使用,
				<viewer :options="optionsPreview" @inited="inited" class="viewer" ref="viewer" >
					<van-swipe :loop="swipePlayState==='2'?true:false" :show-indicators = 'false' :initial-swipe = 'current' @change="onChange" ref="swipe">
						<van-swipe-item  v-for="(item, index) in swiperList" :key="index" >
								<img class="swiper_img_my" style="background-size: cover;" @click.stop="handlePreview(item, index)" :src="item.href" alt="">
						</van-swipe-item>
					</van-swipe>
				</viewer>
				// 页码
				<div class="custom-indicator">{{ current + 1 }}/{{ swiperList.length }}</div>
				// 上一页
				<div  class="left" @click.stop="handleSwipe('prev')">
					<img src="@/assets/img/examList/prev.png" alt="">
				</div>
				// 下一页
				<div class="right" @click.stop="handleSwipe('next')">
					<img src="@/assets/img/examList/next.png" alt="">
				</div>
			</div>
			// 大图预览 设置自定义按钮 主要要设置z-index 高于viewer.js 否则不显示
			<div v-if="show" class="image_preview_box">
				<div class="preview-indicator">{{ current + 1 }}/{{ swiperList.length }}</div>
				<div class="preview_rotate" @click.stop="hanleRotate('旋转')" style="color:red">
					<img src="@/assets/img/taskList/[email protected]" alt="">
				</div>
				<span class="preview_close" @click="hanleClose">退出全屏</span>
				<div :style="{top: - (clientHdetail/2 - 28) + 'px'}" class="preview_left" @click.stop="handleSwipePreview('prev')">
					<img src="@/assets/img/examList/prev.png" alt="">
				</div>
				<div :style="{top: - (clientHdetail/2 - 28) + 'px'}" class="preview_right" @click.stop="handleSwipePreview('next')">
					<img src="@/assets/img/examList/next.png" alt="">
				</div>
		</div>
	</div>
</template>

(3)data中代码

点击查看代码
optionsPreview: {
				'inline': false, //启用inline模式
				'button': false, //显示右上角关闭按钮
				'navbar': false, //显示缩略图导航
				'title': false, //显示当前图片的标题
				'toolbar': false, //显示工具栏
				'tooltip': false, //显示缩略百分比
				'movable': true, //图片是否可移动
				'zoomable': true, //图片是否可缩放
				'rotatable': true, //图片是否可旋转
				'scalable': false, //图片是否可翻转
				'transition': false, //使用css3过度
				'fullscreen': false, //播放时是否全屏
				'keyboard': false, // 背景 启用modal背景,为单击时不会关闭模态的背景指定静态
				'loop':false,
				'zoomOnTouch':true,// 开启触摸缩放
				hide: ((e)=>{
					this.hanleClose()
					console.log(e.type);
				}),
				view: ((e) =>{
					console.log(e.type);
					this.current = e.detail.index
					this.rotatePre = false
					this.onChange(e.detail.index)
				}),
				
			},
			rotatePre:false, // 判断图片是否旋转
			swiperList: [], // 轮播图数据
			current: 0, // 轮播图当前索引

(4)methods数据

点击查看代码
//  初始化
inited (viewer) {
	console.log(viewer);
	this.$viewer = viewer
},	
// 下一页
handleSwipePreview(item) {
			if (item === 'prev') {
				if(this.swipePlayState == '2'){
					// 可以无限翻页
					// 上一页
					this.$viewer.prev(true);
					if(this.current>0){
						this.current = this.current-1
					}else{
						this.current=this.swiperList.length-1
					}
				}else{
					if(this.current>0){
						this.$viewer.prev(true);
						this.current = this.current-1
					}
				}
				
			} else if (item === 'next') {
				if(this.swipePlayState == '2'){
					// 下一页
					this.$viewer.next(true);
					if((this.current+1)<this.swiperList.length){
						this.current = this.current+1
					}else{
						this.current = 0
					}
				}else{
					if((this.current+1)<this.swiperList.length){
						this.$viewer.next(true);
						this.current = this.current+1
					}
				}
			}
		},

		// 旋转
		hanleRotate(type) {
			console.log();
			this.rotatePre = !this.rotatePre
			if(this.rotatePre){
				this.$viewer.rotate(90);
			}else{
				this.$viewer.rotate(-90);
			}
		},
		// 退出全屏
		hanleClose(){
			this.$viewer.hide()
			this.show = false
			this.$refs.swipe.swipeTo({'index': this.currentBefore})
		},

		// 大图预览
		handlePreview(item, index) {
			this.$viewer.view(index)
			this.currentBefore = index
			console.log(document.getElementsByClassName('viewer-container'));

			this.show = true
		},

大图预览具体效果如图
image

标签:false,预览,Viewer,js,current,viewer,true
From: https://www.cnblogs.com/Mar-/p/17172521.html

相关文章

  • 【MongoDB】连接池理解及测试 NodeJS
    更新于2021-05-15最近对MongoDB连接池如何正确使用不是特别清楚,于是做了一些测试也查找了相关资料,终于知道了MongoDB的连接池是怎么工作的了。首先,在nodejsweb应用......
  • 【NodeJS】【pm2】加参数运行
    nodeindex.jsarg1arg2pm2startindex.js--arg1arg2上面两个等价 获取参数process.argv返回一个数组如下:['/usr/bin/node','/usr/lib/node_mod......
  • 【NodeJS】CommonJS原理
    (function(modules){varinstalledModules={};function__webpack_require__(moduleId){if(installedModules[moduleId]){return......
  • 【NodeJS】最小服务器
    consthttp=require('http');constfs=require('fs');http.createServer((req,res)=>{leturl=req.url;console.log(url);switch(req.me......
  • Excel 数据转二维数组 JSON
    问题描述:偶尔会遇到读取Excel数据的场景如果是在网页中,可以上传文件然后处理(可借助js-xlsx等插件)如果有node服务,也可以使用类似的操作不过如果是在应用外,只是临......
  • js中图片二进制和base64的互转
    <html><head><metacharset="UTF-8"><title></title></head><body><p>正常图片</p><p></p><imgsrc="132......
  • 纯js实现图片无缝循环走马灯效果支持拖拽和惯性滑动
    要求实现一个无缝循环的图片滚动公告,支持上下,左右模式。要求1,不可有卡顿图片无缝轮播     2,手指拖拽暂停轮播,用户可左右(或上下)拖拽,快速滑动有惯性效果。 ......
  • JS 获取浏览器的宽和高
    网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth(包括边线的宽)网页可见区域高:document.bod......
  • js返回上一页面
    一、history.back()和history.go(-1)history.back()和history.go(-1)都是返回之前页面,但是方法不同,所以是有区别的:history.back(-1) //直接返回当前页的上一页,数......
  • vue项目引用vue-pdf打包多出worker.js文件
    问题描述:项目要用到pdf预览功能,因为是vue项目就是直接导入了vue-pdf组件,但是在进行打包的时候在dist文件夹下面多个worker.js文件,导致项目部署后预览pdf直接报了404 方......