应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

vue elementui 图片预览。el-image-viewer图片查看器。修改图片预览的自带样式。点击哪一个就查看哪一个图片

11010人阅读 2020/9/9 10:19 总访问:5182654 评论:0 收藏:0 手机
分类: 前端

先引入图片预览的组件

  1. import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
  2. export default {
  3. components: {
  4. ElImageViewer
  5. },
  6. .....
  7. data() {
  8. return {
  9. showViewer: false,
  10. initialIndex: 0,
  11. fileUrls:["url1","url2","url3"]
  12. }
  13. },
  14. }

然后在页面上加入图片预览的组件
主要的属性有urlList,on-close,initial-index等属性。


urlList用来放图片链接
on-close用来关闭查看器
initial-index用来设置打开预览器显示的图片索引

基本的使用如下:

  1. <template>
  2. <div>
  3. <el-button @click="onPreview">预览</el-button>
  4. <el-image-viewer
  5. v-if="showViewer"
  6. :on-close="closeViewer"
  7. :initial-index="initialIndex"
  8. :url-list="fileUrls" />
  9. </div>
  10. </template>
  11. <script>
  12. // 导入组件
  13. import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
  14. export default {
  15. name: 'Index',
  16. components: { ElImageViewer },
  17. data() {
  18. return {
  19. showViewer: false,//图片预览是否显示
  20. initialIndex: 0,//打开图片预览时候的索引
  21. fileUrls:["url1","url2","url3"]//图片的地址
  22. }
  23. },
  24. methods: {
  25. //点击按钮打开图片预览
  26. onPreview() {
  27. this.showViewer = true
  28. },
  29. // 关闭查看器
  30. closeViewer() {
  31. this.showViewer = false
  32. }
  33. }
  34. </script>

实际使用

实际使用的时候要灵活运用一点。比如这种效果,点击上传的图片实现预览

点击哪一个就查看哪一个图片,所以开始预览的时候需要传递一个索引,这个比较简单显示图片的时候有索引,预览的时候传递过去就性格了

  1. //打开图片预览
  2. onPreviewImg(i) {
  3. //设置预览图片的索引
  4. this.initialIndex = i
  5. this.showViewer = true
  6. }


tip:如果是vue3下面的el-image,可以自带预览,直接设置:preview-src-list=”state.srcList” :initial-index=”i” 这两个属性就行了。具体参考官网

还有就是绑定图片的时候列表可能不仅仅只有图片路径还有其他字段,我们可以通过js的map只获取图片的路径,比如:

  1. :url-list="taskResoult.imgJson.map(a=>a.fileUrl)"

这些都可以灵活的来。贴一个完整一点的代码,包括一些样式图片上传这些等。

  1. <template>
  2. <div>
  3. <!-- 图片上传start -->
  4. <div class="form-content panle">
  5. <div class="img-boxs">
  6. <div v-for="(item,i) in taskResoult.imgJson" :key="i+'img'" class="img-waper" @click="onPreviewImg(i)">
  7. <img :src="'/oss/api/ImageViewer/'+item.id+'.jpg?percent=0.6&quality=80&od=true'" width="79px"
  8. height="79px">
  9. <div class="remove-icon" @click="rmImgs(i)">
  10. <img src="/asserts/img/error.png">
  11. </div>
  12. </div>
  13. <div v-if="taskResoult.imgJson.length<9" class="img-waper">
  14. <div class="add-btn" @click="addImgClick">
  15. <input ref="inputImgFile" type="file" @change="uploadimg" style="display: none;"
  16. accept="image/*">
  17. <div class="icon-waper">
  18. <div class="icon-x" />
  19. <div class="icon-y" />
  20. </div>
  21. </div>
  22. </div>
  23. </div>
  24. </div>
  25. <!-- 图片上传end -->
  26. <!-- 图片预览start -->
  27. <el-image-viewer v-if="showViewer" :z-index="20000" :initial-index="initialIndex" :append-to-body="true"
  28. :on-close="closeViewer" :mask-closable="false" :url-list="taskResoult.imgJson.map(a=>a.fileUrl)" />
  29. <!-- 图片预览end -->
  30. </div>
  31. </template>
  32. <script>
  33. import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
  34. export default {
  35. // 组件名字
  36. name: 'UpLoadImg',
  37. components: {
  38. ElImageViewer
  39. },
  40. // 组件参数
  41. props: {
  42. index: {
  43. type: Number,
  44. default: 0
  45. },
  46. },
  47. data() {
  48. return {
  49. showViewer: false,
  50. initialIndex: 0,
  51. taskResoult: {
  52. 'uploadFileID': '',
  53. stuImgs: '',
  54. imgJson: [],
  55. 'uploadFileInfo': '',
  56. uploadFileInfoJson: {},
  57. 'remarks': null
  58. }
  59. }
  60. },
  61. mounted() {
  62. this.initPic()
  63. },
  64. // 组件方法
  65. methods: {
  66. initPic() {
  67. },
  68. //点击添加图片,直接触发文件选择框的事件即可
  69. addImgClick() {
  70. this.$refs.inputImgFile.click()
  71. },
  72. //打开图片预览
  73. onPreviewImg(i) {
  74. //设置预览图片的索引
  75. this.initialIndex = i
  76. this.showViewer = true
  77. },
  78. // 关闭图片预览
  79. closeViewer() {
  80. this.showViewer = false
  81. },
  82. rmImgs(i) {
  83. this.taskResoult.imgJson.splice(i, 1)
  84. // console.log(self.taskResoult)
  85. this.$forceUpdate()
  86. },
  87. //上传图片逻辑。文件选择框的change事件触发
  88. uploadimg(e) {
  89. // 日精进上传图片
  90. const imgFileExtensionArry = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'webp', 'psd', 'svg', 'tiff']
  91. const file = e.target.files[0]
  92. const fileExt = file.name.substr(file.name.lastIndexOf('.') + 1)
  93. if (imgFileExtensionArry.indexOf(fileExt.toLowerCase()) === -1) {
  94. this.$message.warning('仅允许提交图片文件!')
  95. return
  96. }
  97. const formData = new FormData()
  98. formData.append('bucketName', 'labroom')
  99. formData.append('filePath', 'labresult')
  100. formData.append('FileType', 1)
  101. formData.append('file', file)
  102. if (this.taskResoult.stuImgs && this.taskResoult.imgJson.length === 9) {
  103. this.$message.error('不允许超过9张图片')
  104. return
  105. }
  106. const self = this
  107. self.$service.api.UpLoadFormFile(formData).then(res => {
  108. const imgInfo = {
  109. id: res.data.id,
  110. fileName: res.data.title,
  111. fileUrl: '/oss/api/ImageViewer/' + res.data.id + '.jpg'
  112. }
  113. self.taskResoult.imgJson.push(imgInfo)
  114. console.log(self.taskResoult)
  115. self.$forceUpdate()
  116. })
  117. }
  118. }
  119. }
  120. </script>
  121. <style scoped="scoped" lang="scss">
  122. // 问题截图,传递图片的样式
  123. .form-content.panle {
  124. // padding: 20px;
  125. padding-bottom: 10px;
  126. // background-color: #f8f8f8;
  127. .img-boxs {
  128. display: flex;
  129. /* margin-right: 46px; */
  130. flex-wrap: wrap;
  131. .img-waper {
  132. margin-right: 10px;
  133. margin-bottom: 10px;
  134. position: relative;
  135. .remove-icon:hover {
  136. cursor: pointer;
  137. img {
  138. opacity: 0.6;
  139. }
  140. }
  141. .remove-icon {
  142. position: absolute;
  143. width: 14px;
  144. height: 14px;
  145. top: -8px;
  146. right: -5px;
  147. img {
  148. width: 100%;
  149. }
  150. }
  151. }
  152. }
  153. .add-btn:hover {
  154. cursor: pointer;
  155. opacity: 0.6;
  156. }
  157. .add-btn {
  158. width: 79px;
  159. height: 79px;
  160. border: solid 1px #DDDDDD;
  161. display: flex;
  162. align-items: center;
  163. flex-wrap: wrap;
  164. justify-content: space-around;
  165. .icon-waper {
  166. width: 18px;
  167. height: 21px;
  168. position: relative;
  169. .icon-x {
  170. width: 19px;
  171. height: 5px;
  172. background-color: #DDDDDD;
  173. position: absolute;
  174. top: 0;
  175. bottom: 0;
  176. margin: auto;
  177. }
  178. .icon-y {
  179. height: 21px;
  180. width: 5px;
  181. background-color: #DDDDDD;
  182. position: absolute;
  183. left: 0;
  184. right: 0;
  185. margin: auto;
  186. }
  187. }
  188. }
  189. }
  190. </style>

修改自带样式:

比如可以在组件上面写一点样式

  1. <el-image-viewer
  2. v-if="showviewer"
  3. :on-close="closeviewer"
  4. :url-list="urlList"
  5. style=" 80%; height: 80%; margin-left: 10%; margin-top: 5%"/>

也可以自己写样式来覆盖控件里边的样式
比如默认图片的最大宽度是100%我们都可以自己修改

  1. <div class="my-el-image-viewer">
  2. <el-image-viewer v-if="showViewer" style="z-index:99999999;" :on-close="closeViewer" :initial-index="initialIndex"
  3. :url-list="details.feedbackImgs.map(a => a.fileUrl)" />
  4. </div>
  5. <style>
  6. .my-el-image-viewer .el-image-viewer__img {
  7. max-width: 86% !important;
  8. }
  9. </style>

注意,样式就不要加上scoped了,不然样式无法作用到组件内容,只在当前组件起作用。而且为了防止样式污染其他样式,最好写样式的时候加个前缀,比如我这里的.my-el-image-viewer


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue elementui常用表单验证

&lt;script&gt; exportdefault{ name:&quot;form&quot;, data(){ //ip地址校验 varIPValidator=(rule,value,callbac...

vue elementui隐藏表格列vue element-ui表格添加自增序号列

vue elementui隐藏表格列v-if就搞定了,如果不是动态的显示与隐藏直接设置成false就行 &lt;el-table-column label=&quot;...

vue elementui,vue3 element plus 文件上传的时候设置其他参数后台.net接收传递的额外参数图片上传

比如上传文件的时候额外传递两个select选择的值 前台前面上传文件的时候要提供默认参数很简单,el-upload绑定一个data即可...

vue elementui 常用表格,条件查询,类型解析,弹窗显示详情,图片显示,图片预览

[TOC]第一版 页面&lt;template&gt; &lt;div class=&quot;app-container&quot;&gt; &lt;el-card&gt; &lt;!-...

vue elementui 基础表格布局,基础表格+条件+搜索框布局类型处理,父子组件方法调用

[TOC]基础表格+条件+搜索框布局效果如下:代码如下: &lt;template&gt; &lt;div class=&quot;app-container&quot;&gt...

vue elementui 弹窗el-dialog,自定义弹窗样式,单选按钮el-radio联动

效果如下: 代码如下: &lt;!-- 处理问题反馈使用的弹窗 --&gt; &lt;template&gt; &lt;div&gt; &lt;!-- 弹窗sta...

vue elementui分页条使用与.net后台sqlsugar等分页方法使用常用分页模板

分页条&lt;div style=&quot;margin-top: 20px;margin-bottom: 20px;text-align: center;&quot;&gt; &lt;el-pagination ...

vue elementui table去掉滚动条

当table内容列过多时,可通过height属性设置table高度以固定table高度、固定表头,使table内容可以滚动。现在需求是右侧滚...

image viewer(图片预览)的具体实践

我们经常遇到,在手机浏览图片时,图片会进行放大。看起来的效果很舒服。我们就来实践一番吧:第一:引进css:```csharp&lt;...

jQuery实现图片预览功能

/** * 图片预览 */ function priview(imgShow) { /* jquery中的live()方法在jquery1.9及以上的版本中已...

input 文件上传类型限制上传图片预览,获取上传文件名称,获取上传文件的后缀名,限制文件大小等

限制只能上传图片image/* &lt;input type=&quot;file&quot; name=&quot;file&quot; id=&quot;choiseFile&quot; accept=&qu...

uni-app 微信小程序 实现图片预览

基本用法:在uniapp中,我们可以使用uni.previewImage()API对图片进行预览,具体使用方法如下: uni.previewImage({ ur...

vue3 图片上传,文件上传,视频上传图片预览,视频预览

直接调用接口上传参考:https://www.tnblog.net/notebook/article/details/8495[TOC]基础的图片上传,文件上传,视频上传界...

Quartz.NET实例动态改变周期调度misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.NET Windows服务发布、安装、卸载、监听脚本服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...