点击查看大图滑动预览touchTouch app放大缩小pinchzoom

https://pan.baidu.com/s/1_BCUSss8_3i3yiSATyc89w 提取码: h436

图片404处理

// touchTouch.jquery.js loadImage(src, callback){} 函数内部
// 添加错误图片处理
var img = $('<img>')
img.on('load', function(){
	callback.call(img);
});
var stu = true
img.on("error", function () {
  	if(!stu){
		callback.call($("<span>").text("图片找不到了"))
	}else{
		$(this).attr("src", "./img/error.png"); //备用错误图片
		stu = false
	}
})
img.attr('src',src);

在这里插入图片描述

*{ touch-action: none; }

解决这个错误
在这里插入图片描述
代码示例


<!DOCTYPE html>
<html>
  <head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0" />

    <title>测试</title>
    <link rel="stylesheet" type="text/css" href="touchTouch/touchTouch/touchTouch.css" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript" src="touchTouch/touchTouch/touchTouch.jquery.js" ></script>
    <style>
    		*{ touch-action: none; }
            .img-container{
                overflow: hidden;
            }
            .img-container a{
                float: left;
                width: 100px;
                height: 200px;
                overflow: hidden;
                background-size: 100% 100%;
                background-repeat: no-repeat;
            }
       </style>
  </head>
  <body>

    <div class="img-container" id="thumbs">
      <a href="./img/01.png" style="background-image: url(./img/01.png);"></a>
      <a href="./img/02.png" style="background-image: url(./img/02.png);"></a>
      <a href="./img/03.png" style="background-image: url(./img/03.png);"></a>
    </div>



		<div class="img-container" id="thumbs2">
      <a href="./img/01.png" style="background-image: url(./img/01.png);"></a>
      <a href="./img/02.png" style="background-image: url(./img/02.png);"></a>
      <a href="./img/03.png" style="background-image: url(./img/03.png);"></a>
    </div>
    <script>
      $(function(){
        $('#thumbs a').touchTouch();
			   $('#thumbs2 a').touchTouch();
      })
    </script>
  </body>
</html>

App放大缩小处理 pinchzoom.js

https://github.com/manuelstofer/pinchzoom/blob/master/src/pinch-zoom.js

https://download.csdn.net/download/weixin_42448623/12024185
单独使用示例

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>图片缩放</title>
    <style>
        .pinch-zoom,.pinch-zoom img{
            width: 100%;
            -webkit-user-drag: none;
            -moz-user-drag: none;
            -ms-user-drag: none;
            user-drag: none;
        }
    </style>
</head>
<body>
<div class="page" style="display:block">
    <div class="pinch-zoom">
        <img src="../img/01.png"/>
    </div>
</div>
<!-- <script src="js/jquery-1.7.2.min.js"></script> -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="./pinchzoom.js"></script>
<script type="text/javascript">
    $(function () {
        $('div.pinch-zoom').each(function () {
            new RTP.PinchZoom($(this), {});
        });
    })
</script>
</body>
</html>

配合使用

修改 touchTouch.jquery.js

items.on('click', function(e){
	 ......
	 
	// 最后
	$('.placeholder').each(function () {
         new RTP.PinchZoom($(this), {});
    });
}

代码


<!DOCTYPE html>
<html>
  <head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0" />

    <title>测试</title>
    <link rel="stylesheet" type="text/css" href="touchTouch/touchTouch/touchTouch.css" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
		<!-- <script src="https://hammerjs.github.io/dist/hammer.js"></script> -->
		<script src="./pinchzoom.js"></script>
    <script type="text/javascript" src="touchTouch/touchTouch/touchTouch.jquery.js" ></script>

    <style>
			*{ touch-action: none; }
            .img-container{
                overflow: hidden;
            }
            .img-container a,.img-container img{
                float: left;
                width: 100px;
                height: 200px;
                overflow: hidden;
                background-size: 100% 100%;
                background-repeat: no-repeat;
            }
            .pinch-zoom-container{
            	width:100%;
            	height:100%; 
            	display: inline-block;
            }
       </style>
  </head>
  <body>

    <div class="img-container" id="thumbs">
			<a href="./img/01.png" style="background-image: url(./img/01.png);">3</a>
			<a href="./img/02.png" style="background-image: url(./img/02.png);">3</a>
			<a href="./img/03.png" style="background-image: url(./img/03.png);">3</a>
		</div>



	
    <script>
      $(function(){
        $('#thumbs a').touchTouch();
      })
	 		
    </script>
  </body>
</html>

一个页面多处使用 互不影响


<!DOCTYPE html>
<html>
  <head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0,minimum-scale=1.0,maximum-scale=1.0" />
      <link rel="stylesheet" type="text/css" href="touchTouch/touchTouch/touchTouch.css" />
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script type="text/javascript" src="pinchzoom.js" ></script>
    <script type="text/javascript" src="touch.js" ></script>
    <title>测试</title>

    <style>
            .img-container{
                overflow: hidden;
            }
            .img-container img{
                float: left;
                width: 200px;
                height: 200px;
                overflow: hidden;
                background-size: 100% 100%;
                background-repeat: no-repeat;
            }
       </style>
  </head>
  <body>

    <div class="img-container" id="thumbs">
      <img data-index="0" href="http://pic.netbian.com/uploads/allimg/181116/174424-15423614646d06.jpg" >
      <img data-index="1" href="http://pic.netbian.com/uploads/allimg/181115/114126-154225328668ce.jpg">
      <img data-index="2"href="http://pic.netbian.com/uploads/allimg/181101/195002-1541073002d4f0.jpg" >
    </div>

        <div class="img-container" id="thumbs3">
            <img data-index="0" href="http://pic.netbian.com/uploads/allimg/181115/114126-154225328668ce.jpg" >
            <img data-index="1" href="http://pic.netbian.com/uploads/allimg/181101/195002-1541073002d4f0.jpg" >
            <img data-index="2" href="http://pic.netbian.com/uploads/allimg/181116/174424-15423614646d06.jpg" >
    </div>
    <script>
            $(document).ready(function(){
                var imrArr = [
                    "http://pic.netbian.com/uploads/allimg/181116/174424-15423614646d06.jpg",
                    "http://pic.netbian.com/uploads/allimg/181115/114126-154225328668ce.jpg",
                    "http://pic.netbian.com/uploads/allimg/181101/195002-1541073002d4f0.jpg"
                ]
                var imrArr2 = [
                    "http://pic.netbian.com/uploads/allimg/181115/114126-154225328668ce.jpg",
                    "http://pic.netbian.com/uploads/allimg/181101/195002-1541073002d4f0.jpg",
                    "http://pic.netbian.com/uploads/allimg/181116/174424-15423614646d06.jpg"
                ]

                $("#thumbs img").touchTouch(imrArr)
                $("#thumbs3 img").touchTouch(imrArr2)
            })
            
    </script>
  </body>
</html>
(function(){
	
    var touchArr = []
	$.fn.touchTouch = function(imgurl){
        
        function Touch(imgParent,items,imgurl){
            this.parent = imgParent;
            this.placeholders = $([]);
			this.index = 0;
            this.zooms = [];
            this.items = items;
            this.imgurl = imgurl
        }
        Touch.prototype.init = function(){
            this.created();

            // 将标记附加到页面
            this.overlay.hide().appendTo(this.parent)
            this.closeBtn.appendTo(this.overlay);
            this.slider.appendTo(this.overlay,this.closeBtn);
            this.overlay.append(this.prevArrow).append(this.nextArrow);

            var _this = this;
            // 为每个图像创建占位符
            this.items.each(function(){
                _this.placeholders = _this.placeholders.add($('<div class="placeholder">'));
            });
            this.slider.append(this.placeholders);

            this.event()
        }
       
        Touch.prototype.created = function(){
            this.overlay = $('<div class="galleryOverlay">');
            this.slider = $('<div class="gallerySlider">');
            this.prevArrow = $('<a class="prevArrow"></a>');
            this.nextArrow = $('<a class="nextArrow"></a>');
            this.closeBtn = $('<span class="closeBtn"></span>');
            this.overlayVisible = false;
        }
        
        Touch.prototype.hideOverlay = function(){
            window.localStorage.setItem("windowReceiverAPP_img", "")
            if(!this.overlayVisible){
                return false;
            }
            
            this.overlay.hide().removeClass('visible');
            this.overlayVisible = false;
        }

        Touch.prototype.showOverlay = function(){
            window.localStorage.setItem("windowReceiverAPP_img", "1")
            var _this = this;
			if (this.overlayVisible){
				return false;
			}
			this.overlay.show();
			setTimeout(function(){
				_this.overlay.addClass('visible');
			}, 100);
	
			this.offsetSlider(this.index);
			
			this.overlayVisible = true;
        }

        Touch.prototype.event = function(){
            var _this = this;
            this.closeBtn.click(function(e){
                if(!$(e.target).is('img')){
                    _this.hideOverlay();
                }
            })

            this.overlay.on('touchstart', '.gallerySlider .placeholder', function(e){
                var touch = e.originalEvent,
                    startX = touch.changedTouches[0].pageX;
        
                _this.slider.on('touchmove',function(e){
                    e.preventDefault();
                    touch = e.originalEvent.touches[0] ||
                            e.originalEvent.changedTouches[0];
                    
                    // 左滑动
                    if(touch.pageX - startX > 10){
                        _this.slider.off('touchmove');
                        _this.showPrevious();
                    }
                    // 右滑动
                    else if (touch.pageX - startX < -10){
                        _this.slider.off('touchmove');
                        _this.showNext();
                    }
                });
    
                return false;
                
            }).on('touchend',function(){
                _this.slider.off('touchmove');
            });

            this.items.on('click', function(e){
                e.preventDefault();              
               
                _this.index = parseInt($(this).attr("data-index"))//items.index(this);
                console.log("index:",_this.index)
                _this.showOverlay(_this.index);
                _this.showImage(_this.index);
                
                // 预加载之后
                _this.preload(_this.index+1);
                // 预加载之前
                _this.preload(_this.index-1); 
                
                // $('.placeholder').each(function () {
                //     	new RTP.PinchZoom($(this), {});
                //     // var zoom = new pinchzoom($(this), {
                //     //     tapZoomFactor:1, //双击放大倍数 默认2
                //     // })
                //     // zooms.push(zoom)
                //     //zoom.zoomOutAnimation() //缩放到原来的位置
    
                // });
                
            });
			
			this.prevArrow.click(function(e){
				e.preventDefault();
				_this.showPrevious();
			});
			
			this.nextArrow.click(function(e){
				e.preventDefault();
				_this.showNext();
			});
        }

        Touch.prototype.offsetSlider  = function(index){
            this.slider.css('left',(-index*100)+'%');
        }

        Touch.prototype.showImage = function(index){
            if(index < 0 || index >= this.items.length){
				return false;
			}
            var _this = this;
			this.loadImage(this.imgurl[index], function(){
				_this.placeholders.eq(index).html(this);
            });
        }

        Touch.prototype.loadImage = function(src, callback){
            var img = $('<img>')
			img.on('load', function(){
				callback.call(img);
			});
			var stu = true
			img.on("error", function () {
				if(!stu){
					var span = $("<span>").text("图片找不到了").css("color","white")
					callback.call(span)
				}else{
					$(this).attr("src", "./img/01.png"); //备用错误图片
				}
			})
			img.attr('src',src);
        }

        Touch.prototype.preload = function(index){
            var _this = this;
            setTimeout(function(){
				_this.showImage(index);
			}, 1000);
        }
        
        Touch.prototype.showNext = function(index){
            var _this = this;
            if(this.index+1 < this.imgurl.length){
				this.index++;
				this.offsetSlider(this.index);
				this.preload(this.index+1);
			}
			else{
				this.slider.addClass('rightSpring');
				setTimeout(function(){
					_this.slider.removeClass('rightSpring');
				},500);
			}
        }

        Touch.prototype.showPrevious = function(index){
            var _this = this;
            if(this.index>0){
				this.index--;
				this.offsetSlider(this.index);
				this.preload(this.index-1);
			}
			else{
				this.slider.addClass('leftSpring');
				setTimeout(function(){
					_this.slider.removeClass('leftSpring');
				},500);
			}
        }

        Touch.prototype.closeBtnClick = function(){
            this.closeBtn.click()
        }

        Touch.prototype.close = function(){
            this.overlay.remove()
			$(window).unbind("PAGE_PAGE_APP_IMG_TOUCH")
        }

        var Touch = new Touch($(this).parent(),this,imgurl)
        Touch.init()
        touchArr.push(Touch)
		
		// 返回关闭图片预览
		$(window).on("APP_IMG_TOUCH",function(){
			console.log("返回关闭图片预览")
            closeTouch()
		})
		
		// 页面离开
		$(window).on("PAGE_APP_IMG_TOUCH",function(){
			console.log("页面离开 清理图片预览")
			removeTouch()
		})
        
        // 离开
        function removeTouch(){
            for(var i = 0; i < touchArr.length; i++){
                touchArr[i].closeBtnClick()
                touchArr[i].close()
            }
        }
        
        // 关闭
		function closeTouch(){
			for(var i = 0; i < touchArr.length; i++){
                touchArr[i].closeBtnClick()
            }
		}
	};
	
})(jQuery);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值