Vue移动端可放大缩小图片vue-photo-preview

效果

与本文无关样式已马赛克

点击图片后:


可通过手指来放大缩小查看图片

使用插件

vue-photo-preview

一、安装

npm install vue-photo-preview --save

二、引用

view.vue中的<script></script>中引用:

<script>
import Vue from "vue";
import preview from "vue-photo-preview";
import "vue-photo-preview/dist/skin.css";
Vue.use(preview);

export default {
  name: "view",
  // ....
}
</script>

三、给异步获取到的文章内容里的图片加上功能插件

步骤:

  1. 异步获取到文章内容
  2. 找到文章内容里的所有图片dom节点(通过ref来获取)
  3. 给图片dom节点都加上属性preview(使用序号来定义),属性preview-text(使用图片名字来定义,图片的alt属性有)
  4. 调用this.$previewRefresh();

完整代码:

<template>
  <div class="view">
    <div class="title">{{ note.title }}</div>
    <!-- 注意,一定要加上ref,后面会用到 -->
    <div class="content" ref="content">
      <div v-html="note.content"></div>
    </div>
  </div>
</template>

<script>
import Vue from "vue";
import preview from "vue-photo-preview";
import "vue-photo-preview/dist/skin.css";
Vue.use(preview);

// 引入与后台数据交互的封装后的api
import { Document_ap } from "@/api";

export default {
  name: "view",
  data() {
    return {
      note: {
        title: '',
        content: ''
      }
    }
  },
  created() {
    // 获取页面数据,写死id为1
    this.getNote(1);
  },
  methods: {
    async getNote(id) {
      const params = {
        Guid: id
      };
      const res = await Document_api.getDocumentDetail(params);
      // 如果交互成功
      if (res.data.Code === 0) {
        this.note = res.data.Result;
        // 重点来了!要写在回调函数里
        setTimeout(() => {
          // 获取到所有图片dom节点
          const imgs = this.$refs.content.getElementsByTagName("img");
          for (let i = 0; i < imgs.length; i++) {
            const img = imgs[i];
            // console.log(img)
            // 给图片加上preview、preview-text属性,例如:<img preview = "0"  preview-text= "描述文字" />
            img.setAttribute("preview", i);
            img.setAttribute("preview-text", img.getAttribute("alt"));
            this.$previewRefresh();
          }
        }, 500);
      }
  }
}
</script>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 3,007评论 1 4
  • Why 本期企业微信版想实现图片放大缩小预览,图片内容来自于第三方(此处为后台接口,前后端分离)。类似朋友圈图片预...
    happy奋斗魔豆阅读 7,355评论 0 3
  • 响应式布局的理解 响应式开发目的是一套代码可以在多种终端运行,适应不同屏幕的大小,其原理是运用媒体查询,在不同屏幕...
    懒猫_6500阅读 809评论 0 0
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,258评论 0 6
  • 2019.8.17今日体验: 一个人想太多,这也想得到,那也想拥有,想来想去会累。做人凡事想开一些,看淡一些,就会...
    京心达_周莎阅读 132评论 1 0