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 相关文章推荐
幻宇的层模拟窗口效果-提供演示和下载
Jan 20 Javascript
Autocomplete Textbox Example javascript实现自动完成成功
Aug 17 Javascript
avalon js实现仿微博拖动图片排序
Aug 14 Javascript
JS实现的不规则TAB选项卡效果代码
Sep 18 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
Jun 12 Javascript
微信小程序实现图片懒加载的示例代码
Dec 13 Javascript
vue.js,ajax渲染页面的实例
Feb 11 Javascript
Node Puppeteer图像识别实现百度指数爬虫的示例
Feb 22 Javascript
js实现图片放大并跟随鼠标移动特效
Jan 18 Javascript
详解基于React.js和Node.js的SSR实现方案
Mar 21 Javascript
vue实现浏览器全屏展示功能
Nov 27 Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 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
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
使用php完成常见的文件上传功能(推荐)
2017/01/13 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
Javascript操作URL函数修改版
2013/11/07 Javascript
使用js实现数据格式化
2014/12/03 Javascript
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
微信小程序wx:for循环的实例详解
2018/10/07 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
资助贫困学生倡议书
2014/05/16 职场文书
信仰纪录片观后感
2015/06/08 职场文书
预防职务犯罪警示教育心得体会
2016/01/15 职场文书
《日月潭》教学反思
2016/02/20 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书
微前端qiankun改造日渐庞大的项目教程
2022/06/21 Javascript
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang