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 相关文章推荐
[对联广告] JS脚本类
Aug 27 Javascript
JavaScript DOM学习第六章 表单实例
Feb 19 Javascript
jquery keypress,keyup,onpropertychange键盘事件
Jun 25 Javascript
jquery下将选择的checkbox的id组成字符串的方法
Nov 28 Javascript
详解jQuery插件开发中的extend方法
Nov 19 Javascript
node.js中的fs.appendFileSync方法使用说明
Dec 17 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
Aug 05 Javascript
jquery读写cookie操作实例分析
Dec 24 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
JavaScript中Object.prototype.toString方法的原理
Feb 24 Javascript
vue一步步实现alert功能
Jul 05 Javascript
Vue 项目部署到服务器的问题解决方法
Dec 05 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
漂亮但不安全的CTB
2006/10/09 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
jQuery代码优化之基本事件
2011/11/01 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
顶部缓冲下拉菜单导航特效的JS代码
2013/08/27 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
2013/11/23 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
jquery仿百度百科底部浮动导航特效
2015/08/08 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
使用Vue.js创建一个时间跟踪的单页应用
2016/11/28 Javascript
BootStrop前端框架入门教程详解
2016/12/25 Javascript
微信小程序下拉框功能的实例代码
2018/11/06 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
2019/11/12 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
使用C语言扩展Python程序的简单入门指引
2015/04/14 Python
Python iter()函数用法实例分析
2018/03/17 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
Python实现动态循环输出文字功能
2020/05/07 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
资产经营总监岗位职责
2013/12/04 职场文书
森林防火工作方案
2014/02/14 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
机关会计岗位职责
2014/04/08 职场文书
我的小天地教学反思
2014/04/30 职场文书
捐书倡议书
2014/08/29 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
导游词之绍兴柯岩古镇
2020/01/09 职场文书