vue实现图片预览组件封装与使用


Posted in Javascript onJuly 13, 2019

这是移动端使用vue框架与mint-ui实现的父用子之间的通信实现的图片预览的功能,在父组件中每一张图片都可以实现图片放大查看。

子组件

<!--html部分-->
<template>
 <div id="imgEnlarge" ref="imgEnlarge" class="img-bg" @click="imgBgHide" v-show="isShow">
   <mt-swipe :auto="0" :show-indicators="false" :continuous=false :defaultIndex="defaultIndex" @change="handleChange">
    <mt-swipe-item v-for="(item,index) in imgSrc" :key="index">
      <img v-lazy="item" @click="handleClick"/>
    </mt-swipe-item>
   </mt-swipe>
 </div>
</template>
<!--js部分-->
<script>
 export default{
  data(){
   return{
    scroll:0
   }
  },
  props:{
   imgSrc:{
    type:Array
   },
   defaultIndex:{
    type:Number,
    default:0
   },
   isShow:{
    type:Boolean,
    deflault:false
   }
  },
  methods:{
   imgBgHide(){
     this.$emit("imgBgHide") //向父组件传递事件
   } ,
   handleClick(e){
     e.stopPropagation()//阻止事件冒泡,避免点击预览的图片穿透遮罩层
   },
   handleChange(value){
   //向父组件传递轮播图索引,解决加载图片的问题
   this.$emit("handleChange",value)
   }
  },
  watch:{
   isShow:{//判断遮罩是否显示,显示时底层页面无法滚动,隐藏后滚动条回到显示时的位置
     handler(newVal,oldVal){
     if(newVal==true){
      this.scrolly = document.body.scrollTop;
      document.body.style.position = "fixed";
     }else{
      document.body.style.position = "static";
      document.body.scrollTop = this.scrolly; //
     }
    } 
   }
  }

 }
</script>
<!--样式部分-->
<style scoped>
  .img-bg {
   width:100%;
    height:100%;
    position:fixed;
    left:0;
    top:0;
    z-index:9999;
    background:rgba(0,0,0,1);
  }
  .img-bg img{
    width:auto;
    height:auto;
    max-width:100%;
    max-height:100%;
  }
</style>

父组件

<!--html部分-->
<template>
 <img-view :isShow="showImg" :imgSrc="imgSrc" @imgBgHide="imgBgHide" :deflaultIndex="defaultIndex" @handleChange="handleChange"></img-view>
</template>
<!--js部分-->
<script>
 //引入子组件
 import imgView from '@/components/common/imgEnlarge.vue';
 export default {
  data(){
   return{
    showImg:false,
    imgSrc:[],
    defaultIndex:0
   }
  },
  components:{imgView},
  mounted(){
   this.collectImgSrc()
  },
  methods:{
   imgBgHide(){//点击遮罩层,遮罩层隐藏
    this.showImg = false;
   },
   handleChange(value){
    this.defaultIndex = value;
   },
   collectImgSrc(){//点击图片放大
    var _this = this;
    var src = document.getElementsByTagName("img");
    for(var i=0;i<src.length;i++){
     _this.imgSrc.push(src[i].getAttribute("src"));
     src[i].setAttribute("data-index",i);
     src[i].onclick = function(e){
      _this.showImg = true;
      _this.defaultIndex = parseInt(e.target.getAttribute("data-index"));//设置初始显示的轮播图的索引
     }
    }

   }
  }
 }
</script>

在全局样式global.css里面设置图片预览居中

/*图片点击放大组件中swipe图片居中*/
#imgEnlarge .mint-swipe-item-wrap > div {
 visibility:hidden;
 display:flex;
 -moz-box-pack:center;
 -webkit-box-pack:center;
 justify-content:center;
 -moz-box-align:center;
 -webkit-box-align:center;
 align-items:center;
 -webkit-align-items:center;
}
#imgEnlarge .mint-swipe-item-wrap > div.is-active {
 visibility:visible;
 display:flex;
 -moz-box-pack:center;
 -webkit-box-pack:center;
 justify-content:center;
 -moz-box-align:center;
 -webkit-box-align:center;
 align-items:center;
 -webkit-align-items:center;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
QQ登录简单实现代码
Mar 09 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
微信分享的标题、缩略图、连接及描述设置方法
Oct 14 Javascript
通过设置CSS中的position属性来固定层的位置
Dec 14 Javascript
浏览器兼容性问题大汇总
Dec 17 Javascript
Node.js的Koa框架上手及MySQL操作指南
Jun 13 Javascript
jQuery回调方法使用示例
Jun 26 jQuery
vue 使用eventBus实现同级组件的通讯
Mar 02 Javascript
web页面和微信小程序页面实现瀑布流效果
Sep 26 Javascript
你应该了解的JavaScript Array.map()五种用途小结
Nov 14 Javascript
35个最好用的Vue开源库(史上最全)
Jan 03 Javascript
微信小程序基于Taro的分享图片功能实践详解
Jul 12 #Javascript
小程序实现悬浮搜索框
Jul 12 #Javascript
小程序实现搜索框功能
Mar 26 #Javascript
iview的table组件自带的过滤器实现
Jul 12 #Javascript
es6中比较有用的7个技巧小结
Jul 12 #Javascript
echarts大屏字体自适应的方法步骤
Jul 12 #Javascript
javascript实现简易聊天室
Jul 12 #Javascript
You might like
图书管理程序(一)
2006/10/09 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
2015/07/29 PHP
PHP的自定义模板引擎
2017/03/24 PHP
基于ThinkPHP实现的日历功能实例详解
2017/04/15 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
用js遍历 table的脚本
2008/07/23 Javascript
Javascript 跨域访问解决方案
2009/02/14 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
JS中async/await实现异步调用的方法
2019/08/28 Javascript
js实现图片上传即时显示效果
2019/09/30 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
python发送伪造的arp请求
2014/01/09 Python
python调用java的Webservice示例
2014/03/10 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
Python如何绘制日历图和热力图
2020/08/07 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
会计与审计毕业生自荐信范文
2013/12/30 职场文书
培训主管的职业生涯规划
2014/03/06 职场文书
岗位职责风险点
2014/03/12 职场文书
比较node.js和Deno
2021/04/27 Javascript