核心代码,创建image对象,获取图片的大小,设置高宽比,监听滚轮控制图片比
- <style lang="less" scoped>
- .demo-spin-icon-load{
- animation: ani-demo-spin 1s linear infinite;
- }
- .img-max100{
- max-width: 337px;
- max-height: 217px;
- /* height: 160px;
- width: 165px; */
- cursor:pointer;
- }
- .flexcenter{
- display: -webkit-flex!important;
- display: flex!important;
- justify-content:center
- }
- </style>
- <template>
-
- <Modal v-model="showOriginImg" :width="width" :loading="loading">
- <div slot="footer">
- <ButtonGroup class="flexcenter">
- <Button @click="rotate(-90)" type="primary" size="small">
- <Icon :size="14" type="md-return-left"></Icon></Button>
- <Button @click="rotate(90)" type="primary" size="small">
- <Icon :size="14" type="md-return-right"></Icon>
- </Button>
- <Button @click="zoom(0.5)" type="primary" size="small">
- <Icon :size="14" type="md-add"></Icon>
- </Button>
- <Button @click="zoom(-0.5)" type="primary" size="small">
- <Icon :size="14" type="md-remove"></Icon>
- </Button>
- </ButtonGroup>
- </div>
- <!-- <div slot="header"></div> -->
- <div class="flexcenter">
- <img :id="imgId" :src="url">
- </div>
- </Modal>
- </template>
-
- <script>
- import imgerror from "@/images/main/imgerror.png"
- import util from "@/libs/util.js"
- import $ from 'jquery';
- export default {
- props:{
- src:String
- }, // 父组件传过来所需的url
- data() {
- return {
- newimgerror:imgerror,
- loading:true,
- showOriginImg:false,
- width:'280px',
- url: imgerror, // 先加载loading.gif
- imgId: 'image'+Math.ceil(Math.random()*1000000),
- imgProp:{
- imgwidth:240,
- imgheight:200,
- zoom:0,
- deg:0,
- },
- newurl:imgerror, // 先加载loading.gif,
- }
- },
- methods:{
- loadImg(){
- var _this = this;
- var newImg = new Image();
- if(_this.src){
- //存在多张图片时,pop显示第一张,点击打开弹窗显示第二张
- if(_this.src.indexOf(';')>=0){
- let newsrc = _this.src.split(';')
- newImg.src = newsrc[1];
- _this.newurl = newsrc[0];
-
- if(newsrc[1] && newsrc[1] != ''){
- newImg.onload = () => { // 图片加载成功后把地址给原来的img
- _this.loading=false;
-
- _this.url = newsrc[1];
-
- _this.imgProp.imgwidth = 500;
- _this.imgProp.imgheight = (500*newImg.height)/newImg.width;
-
- $('#'+_this.imgId).width(_this.imgProp.imgwidth);
- $('#'+_this.imgId).height(_this.imgProp.imgheight);
-
-
- _this.initWidth(_this.imgProp.imgwidth,_this);
- }
- newImg.onerror = () => { // 图片加载错误时的替换图片
- _this.loading = false;
- _this.newurl = imgerror;
- _this.url = imgerror;
-
- _this.imgProp.imgwidth = 240;
- _this.imgProp.imgheight = 200;
- _this.initWidth(240,_this);
- };
- }else{
- newImg.onload = () => { // 图片加载成功后把地址给原来的img
- _this.loading=false;
- _this.url = newsrc[0];
-
- _this.imgProp.imgwidth = 500;
- _this.imgProp.imgheight = (500*newImg.height)/newImg.width;
-
- $('#'+_this.imgId).width(_this.imgProp.imgwidth);
- $('#'+_this.imgId).height(_this.imgProp.imgheight);
-
-
- _this.initWidth(_this.imgProp.imgwidth,_this);
- }
- }
- }else{
- _this.newurl = _this.src;
- _this.url = _this.src;
- newImg.src = _this.src;
-
- newImg.onerror = () => { // 图片加载错误时的替换图片
- _this.loading = false;
- _this.newurl = imgerror;
- _this.url = imgerror;
- _this.imgProp.imgwidth = 240;
- _this.imgProp.imgheight = 200;
- $('#'+_this.imgId).width(_this.imgProp.imgwidth);
- $('#'+_this.imgId).height(_this.imgProp.imgheight);
- _this.initWidth(240,_this);
- };
-
- newImg.onload = () => { // 图片加载成功后把地址给原来的img
- _this.loading=false;
- _this.url = _this.src;
-
- _this.imgProp.imgwidth = 500;
- _this.imgProp.imgheight = (500*newImg.height)/newImg.width;
-
- $('#'+_this.imgId).width(_this.imgProp.imgwidth);
- $('#'+_this.imgId).height(_this.imgProp.imgheight);
-
-
- _this.initWidth(_this.imgProp.imgwidth,_this);
- }
-
- }
- }else{
- _this.newurl = imgerror;
- _this.url = imgerror;
- newImg.src = imgerror;
- newImg.onerror = () => { // 图片加载错误时的替换图片
- _this.loading = false;
- _this.imgProp.imgwidth = 240;
- _this.imgProp.imgheight = 200;
- $('#'+_this.imgId).width(_this.imgProp.imgwidth);
- $('#'+_this.imgId).height(_this.imgProp.imgheight);
- _this.initWidth(240,_this);
- };
- }
- },
- initWidth(widthN,self){
- if(widthN<=170){
- self.width = "200px";
- }else{
- self.width = (widthN+40)+"px";
- }
- },
- showImageFunc(){
- //点击打开弹窗
- // if(this.url === this.src)
- // {
- this.showOriginImg = true;
- // }
- },
- rotate(v){
- var deg = this.imgProp.deg =this.imgProp.deg+v;
- $('#'+this.imgId).css({
- '-webkit-transform': 'rotate(' + deg + 'deg)',
- '-moz-transform': 'rotate(' + deg + 'deg)',
- '-o-transform': 'rotate(' + deg + 'deg)',
- '-ms-transform': 'rotate(' + deg + 'deg)',
- 'transform': 'rotate(' + deg + 'deg)'
- });
- // $('#'+this.imgId).rotate(v);
- },
- //放大缩小
- zoom(v){
- var self = this;
- // 限制最大最小
- if (self.imgProp.zoom+v > 15 || self.imgProp.zoom+v<0.2){
- return
- }
- self.imgProp.zoom = self.imgProp.zoom+v;
- var width = self.imgProp.imgwidth+self.imgProp.imgwidth*self.imgProp.zoom;
- var height = self.imgProp.imgheight+self.imgProp.imgheight*self.imgProp.zoom;
- self.initWidth(width,self);
- $('#'+this.imgId).width(width);
- $('#'+this.imgId).height(height);
- },
- handleScroll:function(e){
- console.log(e)
- if (e.deltaY > 0){
- this.zoom(-0.2);
- } else {
- this.zoom(0.2);
- }
- }
- },
- watch:{
- src(data){
- this.url = imgerror;
- this.newurl = imgerror;
- this.loadImg();
- }
- },
- mounted() {
- let _this = this;
- _this.url = imgerror;
- _this.newurl = imgerror;
- _this.loadImg();
- _this.$nextTick(() =>{
- window.addEventListener('mousewheel',_this.handleScroll,false)
- })
-
- },
- destroyed() {
- let _this = this;
- window.removeEventListener('mousewheel',_this.handleScroll,false)
- }
- }
- </script>
-