vue-preview动态获取图片宽高并增加旋转功能的实现


Posted in Javascript onJuly 29, 2020

vue-preview是一个常用的图片查看器,微博网页版就是用的这个插件:

vue-preview动态获取图片宽高并增加旋转功能的实现

我在项目中也用过这个插件,总体来说,还是比较满意。但是缺少一个图片旋转功能。

安装使用

第一步:安装

npm i vue-preview -S

第二步:引用配置

import VuePreview from 'vue-preview'
Vue.use(VuePreview)
Vue.use(preview, {
 mainClass: 'pswp--minimal--dark',
 barsSize: {top: 0, bottom: 0},
 captionEl: false,
 fullscreenEl: false,
 shareEl: false,
 bgOpacity: 0.85,
 tapToClose: true,
 tapToToggleControls: false
})

第三步:使用

// 定义预览图片列表
previewlist: [
  {
    src: ‘./pic01.jpg',
    w: 1200,
    h: 900
  },
  {
    src: ‘./pic01.jpg',
    w: 1200,
    h: 900
  }
]
 
// 给图片添加“preview-img”类(必须添加且要同名),以及绑定“show”方法
<img :src="decodeURIComponent(item.name)" class="preview-img" @click="show(index)">
 
// 点击图片触发预览方法
show (index) {
  this.$preview.open(index, this. previewlist);
}

动态获取图片宽高

如果图片列表资源是从服务器获取,则需要先获取图片的真实宽高,具体代码如下:

this. previewlist = []; //查看列表
let imglist = […]; //从服务器获取的图片地址列表
show (index) {
  for (let i = 0; i < imglist.length; i++) {
    // 获取图片实际大小
    let newImage = {};
    let img = new Image();
    img.src = imglist[i];
    img.onload = function () {
      newImage.src = imglist[i];
      newImage.w = img.width;
      newImage.h = img.height;
    };
    this.previewlist.push(newImage);
  }
  // 正常情况下javascript都是按照顺序执行的。但是我们可能让该语句后面的语句执行完再执行本身,用setTimeout延时0ms来实现。
  setTimeout(() => {
    this.$preview.open(index, this.previewlist);
  }, 0);
}

新增图片旋转功能

默认的功能有全屏、放大、分享、图片切换等,有时候我们还需要图片旋转功能,怎么办呢?那只能自己动手改插件了。

第一步:添加旋转图标

图标文件路径:node_modules\photoswipe\dist\default-skin

vue-preview动态获取图片宽高并增加旋转功能的实现

原来只有前面8个图片,后面那个稍微大一点的旋转图标是我加上去的,当然你也可以把尺寸设置为和原来的一样。

第二步:添加旋转按钮到页面

页面文件路径:node_modules\vue-preview\src\plugins\preview\preview.vue

<button class="pswp__button pswp__button--rotate" title="旋转" @click="imgRotateFn"></button>

第三步:添加旋转按钮的样式

样式文件路径:node_modules\photoswipe\dist\default-skin

.pswp__button--rotate {
 background-position: -176px 0;
}

第四步:实现旋转方法

文件路径:node_modules\vue-preview\src\plugins\preview\preview.vue

imgRotateFn () {
   this.angle+=90;
   let imgNode = document.getElementsByClassName('pswp__img');
   for (let i = 0; i<imgNode.length; i++) {
      imgNode[i].style.WebkitTransform = 'rotate('+this.angle+'deg)';
   }
 }

这里我只贴出了关键代码,需要你自己做浏览器兼容,以及切换图片时,应该将图片角度设置为0等。

测试结果

vue-preview动态获取图片宽高并增加旋转功能的实现

vue-preview动态获取图片宽高并增加旋转功能的实现

测试没有问题,终于可以下班了,哈哈哈。

Tips:懒得自己动手改插件的伙伴,可以在楼主的GitHub仓库下载改好后的文件,在你安装好 vue-preview 后用“attachment”文件夹中的三个文件替换你项目中的对应文件就拥有“旋转”功能了。GitHub地址:https://github.com/xiongjun0812/vue-preview

今天就分享到这里,有问题欢迎留言交流,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery Uploadify上传带进度条的简单实例
Feb 12 Javascript
js 判断js函数、变量是否存在的简单示例代码
Mar 04 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
Mar 05 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
AngularJs Managing Service Dependencies详解
Sep 02 Javascript
Angular2 多级注入器详解及实例
Oct 30 Javascript
jQuery Validate验证框架详解(推荐)
Dec 17 Javascript
JavaScript实现翻页功能(附效果图)
Feb 16 Javascript
详解Javascript几种跨域方式总结
Feb 27 Javascript
静态页面实现 include 引入公用代码的示例
Sep 25 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
Oct 26 Javascript
Ant Design的可编辑Tree的实现操作
Oct 31 Javascript
vuex管理状态仓库使用详解
Jul 29 #Javascript
解决vue项目获取dom元素宽高总是不准确问题
Jul 29 #Javascript
如何使用three.js 制作一个三维的推箱子游戏
Jul 29 #Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 #Javascript
vue 判断元素内容是否超过宽度的方式
Jul 29 #Javascript
在vue中实现给每个页面顶部设置title
Jul 29 #Javascript
vue实现移动端项目多行文本溢出省略
Jul 29 #Javascript
You might like
PHP syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
php 变量未定义等错误的解决方法
2011/01/12 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
PHP简单获取及判断提交来源的方法
2016/04/22 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
从零开始学习jQuery (六) jquery中的AJAX使用
2011/02/23 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
zeroclipboard 单个复制按钮和多个复制按钮的实现方法
2014/06/14 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
2020/12/22 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
Node.js中的不安全跳转如何防御详解
2018/10/21 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
.net笔试题
2014/03/03 面试题
如何提高MySql的安全性
2014/06/19 面试题
培训讲师岗位职责
2014/04/13 职场文书
大型演出策划方案
2014/05/28 职场文书
2014小学年度工作总结
2014/12/20 职场文书
诚实守信主题班会
2015/08/13 职场文书