美文网首页
js实现移动端图片浏览及缩放

js实现移动端图片浏览及缩放

作者: 王小妞闯天涯 | 来源:发表于2019-12-03 18:16 被阅读0次

需求:

1.图片随着手指滚动

2.双指缩放

3.自动播放

实现:移动端中js有touch事件,touchstart、touchmove、touched,

随手指滚动:touchstart 记录手指起始位置,touchmove计算手指移动位置,并把移动位置赋值给视图的transform translateX

双指缩放:touchstart中得到触摸的两个点,touchmove中计算两个点距离,并把距离值赋给视图的transform scale

自动播放:设置定时器,在每几秒执行的方法中改变视图的transform translateX

自动播放方法:

scrollView() {

        let _this = this;

        var scanner = document.querySelector('.scanner_box');

        var ul = scanner.children[0];

        var w = scanner.offsetWidth;

        var index = 0;

        _this.timer = setInterval(function() {

          if (_this.pageIndex >= 10) {

            _this.pageIndex = 0;

          }

          _this.pageIndex++;

          var translatex = -_this.pageIndex * w;

          ul.style.transition = 'all .3s';

          ul.style.transform = 'translateX(' + translatex + 'px)';

        }, 3000);

      },

双指缩放,滚动:el

el.addEventListener("touchmove", function(e) {

          if (e.touches.length < 2) {

            stopX = e.targetTouches[0].clientX - beginX;

            whiteBack.style.transition = 'none';

          // el.style.transform = 'translateX(' + stopX + 'px)';

          var trans = -_this.picIndex*width +stopX;

          whiteBack.style.transform = 'translateX(' + trans + 'px)';

          }

          e.preventDefault();

          if (e.touches.length >= 2 && istouch) {

            var now = e.touches; //得到第二组两个点

            var scale = _this.getDistance(now[0], now[1]) / _this.getDistance(start[0], start[1]); //得到缩放比例,getDistance是勾股定理的一个方法

            var rotation = _this.getAngle(now[0], now[1]) - _this.getAngle(start[0], start[1]); //得到旋转角度,getAngle是得到夹角的一个方法

            // alert(rotation);

            let rotate = 'rotate(' + rotation.toFixed(1) + 'deg)';

            el.style.transform = 'scale(' + scale + ',' + scale + ')';

            // whiteBack.style.transform ='scale(' + scale + ',' + scale + ')';

            //el.style.transform = 'scale(' + scale + ',' + scale + ') ' + rotate + ' ';

            // el.style.transform = 'rotate(' + rotation + 'deg)';

            //obj.gesturemove && obj.gesturemove.call(el, e); //执行gesturemove方法

          };

        }, false);

getDistance(p1, p2) {

        var x = p2.pageX - p1.pageX,

          y = p2.pageY - p1.pageY;

        return Math.sqrt((x * x) + (y * y));

      },//距离方法

      getAngle(p1, p2) {

        var x = p1.pageX - p2.pageX,

          y = p1.pageY - p2.pageY;

        return Math.atan2(y, x) * 180 / Math.PI;

      }, //夹角方法

相关文章

  • js实现移动端图片浏览及缩放

    需求: 1.图片随着手指滚动 2.双指缩放 3.自动播放 实现:移动端中js有touch事件,touchstart...

  • 禁用浏览器的缩放功能(js)

    一、移动端禁止缩放移动端在禁止缩放上比较简单,添加meta标签即可 二、PC(web)端禁止浏览器缩放S(情景)当...

  • js实现复制到粘贴板方法

    js + clipboard 插件实现复制到粘贴板方法-兼容pc及移动端(ios/安卓) HTML: JS: 首先...

  • 移动端事件

    为什么移动端不用click移动端的click有300ms延迟的问题,在移动端浏览器中,连续两次点击是缩放操作,所以...

  • 检试浏览器类型常用代码

    检测是否是微信浏览器 js判断是否移动端及浏览器内核 检测浏览器是否支持svg 检测浏览器是否支持canvas

  • 移动端使用vue-preview-photo动态加载图片实现图片

    使用场景:移动端需要实现附件预览功能,图片文件可以手指缩放。由于附件比较多,打开页面比较卡,为了提高用户体验,所以...

  • pdf.js的使用实例

    最近 vue项目要在移动端实现在线浏览pdf,所以想到用pdf.jspdf.js可以实现在线预览pdf文档,核心部...

  • 移动端延迟300ms的原因以及解决方案

    一、前言 移动端浏览器提供一个特殊的功能:双击(double tap)缩放。 二、移动端延迟300ms的原因 为什...

  • 操作系统判断

    1、js判断移动端系统 2、js判断是否PC端 3、js判断是否为微信内置浏览器 4、js判断是否为ie浏览器,并...

  • 第三方库之 PhotoView

    效果图 功能 支持两指缩放; 支持单指移动。 图片浏览查看GitHub 地址:PhotoView[https://...

网友评论

      本文标题:js实现移动端图片浏览及缩放

      本文链接:https://www.haomeiwen.com/subject/fwxhgctx.html