小云菜
小云菜
  • 发布:2016-01-27 18:43
  • 更新:2016-01-27 18:43
  • 阅读:20620

mui图片预览(perviewimage)的优化

分类:MUI

mui图片预览(perviewimage)的优化

更好的显示效果看这http://www.cnblogs.com/phillyx/p/5164231.html
主要对mui图片全屏预览插件做了以下三点补充
1.添加了预览图片文字说明,使用的时候需要添加以下cssDOM属性

            .mui-slider-img-content {  
                position: absolute;  
                bottom: 10px;  
                left: 10px;  
                right: 10px;  
                color: white;  
                text-align: center;  
                line-height: 21px  
            }
<img src="../images/yuantiao.jpg" data-preview-src="" data-preview-group="2" data-content="这里是文字说明"/>

2.如果图片过宽或过长,预加载图片(上一张或下一张)时,会和当前显示的图片重叠
原来的效果是这样

主要对缩放进行了更改

    proto._initImgData = function(itemData, imgEl) {  
        if (!itemData.sWidth) {  
            var img = itemData.el;  
            itemData.sWidth = img.offsetWidth;  
            itemData.sHeight = img.offsetHeight;  
            var offset = $.offset(img);  
            itemData.sTop = offset.top;  
            itemData.sLeft = offset.left;  
            //缩放判断,解决预加载图片时,图片过大,和当前显示图片重叠的问题  
            //未更改之前缩放比例能达到2.5倍以上  
            var scale = Math.max(itemData.sWidth / window.innerWidth, itemData.sHeight / window.innerHeight);  
            itemData.sScale = scale > 1 ? 0.977 : scale;  
        }  
        imgEl.style.webkitTransform = 'translate3d(0,0,0) scale(' + itemData.sScale + ')';  
    };

3.解决了预加载页面返回(mui.back)重新加载数据并打开时,预览无用的问题
主要应用场景是这样的:

  • view是预加载的,返回时view隐藏,DOM重置,
  • 如果不清除当前预览对象previmage的话,加载数据后打开当前页面,重新调用mui.previewImage()无效,依然是第一次的预览的DOM结果
  • 因为插件源码决定了该对象是不变的
    var previewImageApi = null;  
    $.previewImage = function(options) {  
        if (!previewImageApi) {  
            previewImageApi = new PreviewImage(options);  
        }  
        return previewImageApi;  
    };
  • 有朋友会问,为毛要预加载,为什么不通过loadurl或其他方式刷新页面(或DOM)?
  • 就为了优化性能,秒开页面,整个详情页的代码前前后后改了一个多星期
  • 我不可能因为插件的不完整而放弃优化的成果。
  • 所以就有了以下的代码
    //释放当前对象及清除DOM  
    proto.dispose = function() {  
        var prevdom = document.getElementById("__MUI_PREVIEWIMAGE");  
        prevdom && prevdom.parentNode.removeChild(prevdom);  
        previewImageApi = null;  
    };

具体代码在这https://github.com/phillyx/mui/blob/master/examples/hello-mui/examples/imageviewer.html

6 关注 分享
地图 飞向月球8 blood Trust bughunter 7***@qq.com

要回复文章请先登录注册

1***@qq.com

1***@qq.com

我的后退键为什么对关闭预览图没有反应,直接返回上一层
2018-06-07 15:34
k***@msn.com

k***@msn.com

mark
2018-03-08 05:22
1***@163.com

1***@163.com

回复 绝啾啾 :
zoom:false
2017-09-27 15:21
1***@163.com

1***@163.com

回复 绝啾啾 :
你好,我也遇到这种问题了,看到你提这个跟你说一声,只要把缩放禁掉就可以长按保存了,亲测有效.
2017-09-27 15:20
y***@163.com

y***@163.com

回复 fwrong :
src属性是实时加载的;data-preview-src属性是点击时才加载的;
如果你想页面加载时就加载图片,把图片路径放在src里就好了吧
2017-08-25 10:39
CNCrazyMoon

CNCrazyMoon

这里的优化,只做了一部分优化,应该还存在一些问题..
尤其是这里使用了 "预加载" , 每次进入WV 都是同一个html页面, 有可能存在的残余..

从你的dispose 来看, 你这里只移除了 DOM, 并没有移除 这个 DOM 对应的 绑定事件,
这会导致一个问题, 有可能导致对事件进行重复绑定...
2017-08-24 17:53
fwrong

fwrong

楼主有没有办法让图片预览在一进来就触发而不需要点击图片触发,图片是服务器动态加载的
2017-07-07 10:11
罗罗诺亚索隆

罗罗诺亚索隆

回复 4***@qq.com :
遇到同样问题,好像因为是服务器图片,不是本地的图片造成的,不知道怎么解决
2017-03-07 15:14
绝啾啾

绝啾啾

回复 郑先生 :
有么有发现,这个预览插件在andriod手机下无法长按保存图片,有解决的办法么,谢谢
2016-11-02 16:14
4***@qq.com

4***@qq.com

为什么在ios上测试点击图片预览,第一次进去不能双指收缩和双点击。必须要滑到下一张才能全不能正常使用。
2016-10-27 08:52