viewer.js 显示图片名称和照片属性

显示效果:

中间显示照片名称,右侧显示照片属性。

图片名称是保存与数据库里的,照片属性是相机或手机拍照时就存储于照片格式中的。

手机照片甚至保存了经纬度等详细信息(这也是QQ能实现旅游相册的原因)。

ADO.net MVC   部分视图 ViewPhotoWithAttr,也就是功能模块化。

<link href="~/Scripts/viewer/viewer.min.css?v=20190612" rel="stylesheet" />
<script src="~/Scripts/viewer/viewer.min.js?v=20190612"></script>

<style type="text/css">
    .photo-with-attr-container {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        top: 0;
        z-index: 999999;
        background-color: rgba(0, 0, 0, 0.7);
    }
    .photo-with-attr-container   .photo-container
    {
        float: left;
        height: 100%;
        width: calc(100% - 300px);
    }
    .photo-with-attr-container .attr-container {
            float: right;
            height: 100%;
            width: 300px;
            background: white;
      }
     .photo-with-attr-container .attr-container .image-attr-title  span
{
        margin: 10px;
    }

    .photo-with-attr-container .attr-container .image-attr-title {
        padding:16px;
        border-bottom: 1px solid #ebeef5;
    }

    .photo-with-attr-container .attr-container .image-attr-content {
        padding: 10px;
        height: calc(100% - 50px);
        width: 300px;
        position: absolute;
    }

    .photo-with-attr-container .attr-container .el-scrollbar__wrap {
        overflow-x: hidden;
    }

    .image-attr-content .ivu-form-item{
            margin-bottom: 0px;
    }

</style>

<script type="text/x-template" id="viewerTemplate">
        <div style="visibility:hidden">
            <div ref="left">
                <div role="button" class="viewer-button viewer-close" data-viewer-action="mix" @@click="hide" />
                <div class="image-attr-title">
                    <label>照片属性</label>
                </div>
                <div class="image-attr-content">
                    <div style="height:100%;">
                        <card v-for="item in currentAttr" v-bind:key="item.Name" style="margin-bottom:8px;width:100%;">
                            <div slot="title" class="clearfix">
                                <span>{{ item.Name }}</span>
                            </div>
                            <div>
                                <i-form label-width="90" size="mini">
                                    <form-item v-for="imageAttr in item.AttrList" v-bind:key="imageAttr.Name" v-bind:label="imageAttr.Name">
                                        <label> {{ imageAttr.Value }}</label>
                                    </form-item>
                                </i-form>
                            </div>
                        </card>
                    </div>
                </div>
            </div>
        </div>
 </script>
<script type="text/javascript">

Vue.component("ViewPhotoWithAttr",{
    template: "#viewerTemplate",
  name: ‘ViewPhotoWithAttr‘,
  props: {
    imageList: {
      type: Array,
      default: null
    }
  },
  data() {
    return {
      viewer: null,
      containerEl: null,
      visible: false,
      currentImage: {},
      currentAttr: []
    }
  },
  watch: {
    imageList() {
    },
    ‘currentImage.id‘(id) {
        var that = this
        var srcPart = ‘@Url.Action("ImageAttr", "Image")‘ + ‘/‘;
        this.$http({
            url: srcPart + id,
            method: ‘get‘
        }).then(function (response) {
            if (response.data.success) {
            that.currentAttr = response.data.data
        }
      })
    },
    visible(val) {
      var el = this.containerEl
      if (el) {
        el.style.visibility = val ? ‘visible‘ : ‘hidden‘
      }
    }
  },
    mounted() {
      //  ‘viewer-title‘

  },
  destroyed() {
    this.destroy()
  },
  methods: {
    init() {
      var body = document.body

      this.destroy()
      var container = document.createElement(‘div‘)
      container.className = ‘photo-with-attr-container‘
      container.style.visibility = ‘hidden‘

      var imageContainer = document.createElement(‘div‘)
      imageContainer.className = ‘photo-container‘

      var imagesEl = document.createElement(‘div‘)
      imagesEl.style.display = ‘none‘
      for (var item of this.imageList) {
        var image = document.createElement(‘img‘)
        image.src = item.imageUrlSmall
        image.alt = item.picName;
        imagesEl.appendChild(image)
      }
      imageContainer.appendChild(imagesEl)

      container.appendChild(imageContainer)
      var attrContainer = document.createElement(‘div‘)
      attrContainer.className = ‘attr-container‘
      attrContainer.appendChild(this.$refs.left)
      container.appendChild(attrContainer)
      body.appendChild(container)
      // var el = this.$refs.images
      var that = this
      var viewer = new Viewer(imagesEl, {
        fullscreen: true,
        inline: true,
        title: function (img, obj) {
            return img.getAttribute("alt");
        },
        container: imageContainer,
        url(image) {
          var src = image.getAttribute("src");
          var item = that.imageList.filter(d => d.imageUrlSmall === src)[0]
          return item.imageUrl
        },
        hide() {
          that.visible = false
        },
        hidden() {
          that.visible = false
        },
        view(image) {
          var src = image.detail.image.getAttribute("src");
          var item = that.imageList.filter(d => d.imageUrl === src)[0]

          that.currentImage = item
          console.log(that.currentImage)
        }
      })
      this.viewer = viewer
      this.containerEl = container
    },
    destroy() {
      if (this.viewer) {
        this.viewer.destroy()
      }
      var body = document.body
      var container = document.getElementsByClassName(‘photo-with-attr-container‘)
      if (container && container.length > 0) {
        for (var item of container) {
          body.removeChild(item)
        }
      }
      this.containerEl = null
      this.viewer = null
    },
    hide() {
      // this.viewer.exit()
      this.destroy()
      var that = this
      this.$nextTick(function() {
          that.visible = false
      })
    },
    view(index) {
      this.visible = true
      if (!this.viewer) {
        this.init()
      }
      var that = this
      this.$nextTick(function(){
          that.viewer.view(index)
      })
    }
  }

})
</script>

图片名称显示部分代码

    imageList: {
      type: Array,
      default: null
    }

     for (var item of this.imageList) {
        var image = document.createElement(‘img‘)
        image.src = item.imageUrlSmall
        image.alt = item.picName; //对alt属性赋值
        imagesEl.appendChild(image)
      }

        title: function (img, obj) {  // 这里实现显示图片名称
            return img.getAttribute("alt");
        },

  

在另一个页面中使用,仅用于示意,并非完整代码,实现了iview轮播图上点击后出现viewer大图轮播图。感觉有点重复,但确实有这个需求。

    <style>
       .carousel-text{
        position: relative;
        bottom: 25px;
        width: 100%;
        font-size:13px;
         /*width: auto;*/ /*也可以*/
        text-align: center;
        color: white;
        background-color: rgba(0,0,0,0.3);
    }
 </style>

                                        <div class="container">
                                            <div id="dowebok_qm">

                                                <Carousel v-bind:radius-dot="carouselDot_qm" dots="outside" v-bind:height="imgHeight2+‘px‘" v-model="carouselValue_qm" style="text-align:center;">
                                                    <div v-for="item in imgData_qm" v-on:click="handleView_qm(item)">
                                                        <Carousel-Item>
                                                            <img v-bind:src="item.src" style="height:inherit;width:auto;cursor:pointer;" />
                                                            <div><span class="carousel-text"> {{item.textName}}</span></div>
                                                        </Carousel-Item>
                                                    </div>
                                                </Carousel>
                                            </div>

                                        </div>
 <ViewPhotoWithAttr ref="viewerYd_qm" v-bind:image-list="imgData_qm" />

    var vm = new Vue({
        template: "#viewTemplate",
        el: ‘#app‘,
        data: {
            imgHeight2:600,
            carouselDot_qm: false,
            carouselValue_qm: 0,
            imgData_qm: [],
         }
        methods: {
            handleView_qm: function (info) { //用于点击时定位
                console.log(‘handleViewYd‘, info.id);
                var index = 0
                for (var i = 0; i < this.imgData_qm.length; i++) {
                    if (this.imgData_qm[i].id === info.id) {
                        index = i
                        break
                    }
                }
                console.log(‘index‘, index);
                this.$refs.viewerYd_qm.view(index)
            },
   getImageListByID: function (dataID) {

    var that=this; //由于ajax中的this不等于vue的this,所以赋值为that;
 that.imgData_qm = [];
            $.ajax({
                        url: url,
                        type: ‘POST‘,
                        data: { dataID: dataID.toString() },
                        success: function (result) {
                          let imageList = result.rows;
                          var srcPart=“url前缀”;
                          that.imgData_qm.push({ id: imageList[i].ImageID, src: srcPart + imageList[i].ImageID + part, name: imageList[i].FileName, textName: picName, imageUrlSmall: srcPart + imageList[i].ImageID + part, imageUrl: srcPart + imageList[i].ImageID })

             }})

   }
 }
})

相关文章:

1  官方文档: https://github.com/fengyuanchen/viewerjs

2 简单用法:

viewer 图片点击放大 用法汇总

https://www.cnblogs.com/hao-1234-1234/p/11011249.html

viewer与 iview Carousel(走马灯) 结合使用,图片无法显示

https://www.cnblogs.com/hao-1234-1234/p/11252183.html

原文地址:https://www.cnblogs.com/hao-1234-1234/p/12169853.html

时间: 2024-10-01 00:22:31

viewer.js 显示图片名称和照片属性的相关文章

第三方Girdview中文件下载的方法,以及js显示图片

/// <summary> /// 文件下载事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Grid_OnCopyInsertClick(object sender, EventArgs e)         { LinkButton LBut = se

强大的jQuery图片查看器插件Viewer.js

简介 Viewer.js 是一款强大的图片查看器 Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片移动 支持键盘 支持全屏幻灯片模式(可做屏保) 支持缩略图 支持标题显示 支持多种自定义事件 Viewer.js 提供了纯 JS 版本和 jQuery 版本,版本名字虽然一样,但代码不一样,不能通用. 在线演示及下载 在线演示:http://www.jqhtml.com/wp-content/upload

Viewer.js 图片预览插件使用

简介 Viewer.js 是一款强大的图片查看器. Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片移动 支持键盘 支持全屏幻灯片模式(可做屏保) 支持缩略图 支持标题显示 支持多种自定义事件 Viewer.js 提供了纯 JS 版本和 jQuery 版本,版本名字虽然一样,但代码不一样,不能通用. 下载 纯JS版本:https://github.com/fengyuanchen/viewerjs j

一款实用的viewer.js 图片相册

Viewer.js 是一款强大的图片相册插件,像SNS交友网站一般都会用到点击缩略图,弹出层大图片,而且弹出层有多个控制按钮,比如放大缩小.旋转.撤回等,底部有缩略图列表可切换. 支持移动设备触摸事件支持响应式支持放大/缩小支持旋转(类似微博的图片旋转)支持水平/垂直翻转支持图片移动支持键盘支持全屏幻灯片模式(可做屏保)支持缩略图支持标题显示支持多种自定义事件 在线实例 默认效果 jQuery版本 回调函数 自定义方法 使用方法 <ul id="sucaihuo">    

Atitit.&#160;html&#160;使用js显示本地图片的设计方案.doc

Atitit. html 使用js显示本地图片的设计方案.doc 1.  Local mode  是可以的..web模式走有的不能兰.1 2. IE8.0 显示本地图片 img.src=本地图片路径无效的解决方案1 2.1. div来完成 .filter1 2.2. URL.createObjectURL (html5 api  ma sida)2 2.3. Css 背景(吗四大)2 2.4. 这是Data URI scheme (base64).2 3. --code2 4. 参考2 1.  

解决 viewer.js 动态更新图片导致无法预览的问题

1.viewer.js 使用 Demo http://fengyuanchen.github.io/viewerjs/ 2.viewer.js 下载地址 https://github.com/fengyuanchen/viewerjs 3.viewer只能初始化一次,也就是说如果用ajax添加了新的图片,你再初始化新添加的图片还是出不来,只有第一次初始化加载的图片 4.解决方案 参看官方文档: 5.具体代码实例 1 $.post('your_url', { 2 param: 'value' 3

推荐一个Xcode插件: KSImageNamed (自动补全图片文件名称, 并显示图片大小)

http://www.csdn.net/article/2014-05-04/2819586-the-best-xcode-plugins 5. KSImageNamed KSImageNamed是一款能够帮助开发者在Xcode中自动补全图片文件名称的插件,其开发者Kent Sutherland来自美国波士顿.KSImageNamed支持NSImage和UIImage,当开发者写到"[UIImage imaged:"时,便会自动将项目中的图片名称提示出来.此外,KSImageNamed

picturebox显示用字符串代表图片名称的(已导入资源的)图片

// 假设你的项目名称为Demo,PictureBox控件名称为pic1,资源中的图像名称为“IMG” // 获取该资源的代码如下,GetObject的参数可以用拼接字符串的方式来完成 // 注意Resources文件夹下的名称跟资源中定义的名称未必是一致的 pic1.Image=(Image)global::Demo.Properties.Resources.ResourceManager.GetObject("IMG"); // 如果调用频繁也可以预定义一下,如下 using Lo

js 显示刚刚上传的图片 (onchange事件)

<table> <tr width="100"> <td>上传商场图片:</td> <td> <input type="file" name="img" onchange="previewImage(this)"> </td> </tr> <tr height=124px;> <td ></td>