返回顶部
首页 > 资讯 > 前端开发 > VUE >AngularJS如何仿微信图片手势缩放
  • 857
分享到

AngularJS如何仿微信图片手势缩放

2024-04-02 19:04:59 857人浏览 八月长安
摘要

小编给大家分享一下angularjs如何仿微信图片手势缩放,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!AngularJS 仿微信图片手势缩放的实例前言:最近,公司做一个混合应用项目,涉及

小编给大家分享一下angularjs如何仿微信图片手势缩放,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

AngularJS 仿微信图片手势缩放的实例

前言:

AngularJS如何仿微信图片手势缩放

最近,公司做一个混合应用项目,涉及到一个图片缩放功能,类似微信那样支持touch事件。

亲测,实现方案很不错,所以放出来,和大家分享一下,希望有人能用得到。

核心思想就是用到了css3的transfORM属性, 不多说,我们看代码:

'use strict';


module.exports = function () {
  var _directive = {
    restrict : 'A',
    scope  : false,
    link   : _link
  };

  function _link(scope, element, attrs) {
    var elWidth, elHeight;

    // mode : 'pinch' or 'swipe'
    var mode = '';

    // distance between two touche points (mode : 'pinch')
    var distance = 0;
    var initialDistance = 0;

    // image scaling
    var scale = 1;
    var relativeScale = 1;
    var initialScale = 1;
    var maxScale = parseInt(attrs.maxScale, 10);
    if (isNaN(maxScale) || maxScale <= 1) {
      maxScale = 3;
    }

    // position of the upper left corner of the element
    var positionX = 0;
    var positionY = 0;

    var initialPositionX = 0;
    var initialPositionY = 0;

    // central origin (mode : 'pinch')
    var originX = 0;
    var originY = 0;

    // start coordinate and amount of movement (mode : 'swipe')
    var startX = 0;
    var startY = 0;
    var moveX = 0;
    var moveY = 0;

    var image = new Image();
    image.onload = function() {
      elWidth = element[0].clientWidth;
      elHeight = element[0].clientHeight;

      element.CSS({
        '-WEBkit-transform-origin' : '0 0',
        'transform-origin'     : '0 0'
      });

      element.on('touchstart', touchstartHandler);
      element.on('touchmove', touchmoveHandler);
      element.on('touchend', touchendHandler);
    };

    if (attrs.ngSrc) {
      image.src = attrs.ngSrc;
    } else {
      image.src = attrs.src;
    }

    
    function touchstartHandler(evt) {
      var touches = evt.originalEvent ? evt.originalEvent.touches : evt.touches;

      startX = touches[0].clientX;
      startY = touches[0].clientY;
      initialPositionX = positionX;
      initialPositionY = positionY;
      moveX = 0;
      moveY = 0;
    }

    
    function touchmoveHandler(evt) {
      var touches = evt.originalEvent ? evt.originalEvent.touches : evt.touches;

      if (mode === '') {
        if (touches.length === 1 && scale > 1) {

          mode = 'swipe';

        } else if (touches.length === 2) {

          mode = 'pinch';

          initialScale = scale;
          initialDistance = getDistance(touches);
          originX = touches[0].clientX -
            parseInt((touches[0].clientX - touches[1].clientX) / 2, 10) -
            element[0].offsetLeft - initialPositionX;
          originY = touches[0].clientY -
            parseInt((touches[0].clientY - touches[1].clientY) / 2, 10) -
            element[0].offsetTop - initialPositionY;

        }
      }

      if (mode === 'swipe') {
        evt.preventDefault();

        moveX = touches[0].clientX - startX;
        moveY = touches[0].clientY - startY;

        positionX = initialPositionX + moveX;
        positionY = initialPositionY + moveY;

        transformElement();

      } else if (mode === 'pinch') {
        evt.preventDefault();

        distance = getDistance(touches);
        relativeScale = distance / initialDistance;
        scale = relativeScale * initialScale;

        positionX = originX * (1 - relativeScale) + initialPositionX + moveX;
        positionY = originY * (1 - relativeScale) + initialPositionY + moveY;

        transformElement();

      }
    }

    
    function touchendHandler(evt) {
      var touches = evt.originalEvent ? evt.originalEvent.touches : evt.touches;

      if (mode === '' || touches.length > 0) {
        return;
      }

      if (scale < 1) {

        scale = 1;
        positionX = 0;
        positionY = 0;

      } else if (scale > maxScale) {

        scale = maxScale;
        relativeScale = scale / initialScale;
        positionX = originX * (1 - relativeScale) + initialPositionX + moveX;
        positionY = originY * (1 - relativeScale) + initialPositionY + moveY;

      } else {

        if (positionX > 0) {
          positionX = 0;
        } else if (positionX < elWidth * (1 - scale)) {
          positionX = elWidth * (1 - scale);
        }
        if (positionY > 0) {
          positionY = 0;
        } else if (positionY < elHeight * (1 - scale)) {
          positionY = elHeight * (1 - scale);
        }

      }

      transformElement(0.1);
      mode = '';
    }

    
    function getDistance(touches) {
      var d = Math.sqrt(Math.pow(touches[0].clientX - touches[1].clientX, 2) +
        Math.pow(touches[0].clientY - touches[1].clientY, 2));
      return parseInt(d, 10);
    }

    
    function transformElement(duration) {
      var transition = duration ? 'all cubic-bezier(0,0,.5,1) ' + duration + 's' : '';
      var matrixArray = [scale, 0, 0, scale, positionX, positionY];
      var matrix   = 'matrix(' + matrixArray.join(',') + ')';

      element.css({
        '-webkit-transition' : transition,
        transition      : transition,
        '-webkit-transform' : matrix + ' translate3D(0,0,0)',
        transform      : matrix
      });
    }
  }

  return _directive;
};

上面代码中我们新建了一个directive,方便多个地方重用。

当我们建立好directive时候,该如何使用呢?

 <img  src="assets/images/floorplan.jpeg" ng-pinch-zoom>

我们只需要在img文件上设定一个属性即可,是不是很简单呢?

看完了这篇文章,相信你对“AngularJS如何仿微信图片手势缩放”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网VUE频道,感谢各位的阅读!

--结束END--

本文标题: AngularJS如何仿微信图片手势缩放

本文链接: https://lsjlt.com/news/71935.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • AngularJS如何仿微信图片手势缩放
    小编给大家分享一下AngularJS如何仿微信图片手势缩放,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!AngularJS 仿微信图片手势缩放的实例前言:最近,公司做一个混合应用项目,涉及...
    99+
    2024-04-02
  • Android ImageView随手势变化动态缩放图片
    在Android实际项目开发中,经常要用到ImageView这个组件,如果纯粹只是用来显示某一张图片,这个原生的组件是很方便的。但有时候为了效果更炫一点,比如很多软件都有的对图...
    99+
    2022-06-06
    图片 动态 手势 Android
  • Android手势控制实现缩放、移动图片
    本文实例为大家分享了Android手势控制实现缩放、移动图片的方法,供大家参考,具体内容如下 新建一个触摸监听器类 package com.liyong.btprinter;...
    99+
    2022-06-06
    图片 Android
  • 微信小程序如何实现图片双滑缩放大小
    这篇文章主要介绍了微信小程序如何实现图片双滑缩放大小 ,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在做小程序开发的过程中,后端传来一张图片地图,需要实现双手指滑动,使图片缩...
    99+
    2023-06-26
  • Android手势滑动实现ImageView缩放图片大小
    本文推出了两种Android手势实现ImageView缩放图片大小的方法,分享给大家供大家参考,具体内容如下 方法一: 将以下代码写到MulitPointTouchListen...
    99+
    2022-06-06
    图片 Android
  • Android手势滑动实现两点触摸缩放图片
    学习安卓手势滑动,多点触摸放大缩小图片,分享给大家供大家参考,具体代码如下 1.布局文件如下main.xml <?xml version="1.0" enc...
    99+
    2022-06-06
    图片 Android
  • Android 高仿微信朋友圈动态支持双击手势放大并滑动查看图片效果
    最近参与了开发一款旅行APP,其中包含实时聊天和动态评论功能,终于耗时几个月几个伙伴完成了,今天就小结一下至于实时聊天功能如果用户不多的情况可以scoket实现,如果用户万级就...
    99+
    2022-06-06
    仿微信 图片 朋友圈 动态 手势 Android
  • ps如何放大缩小图片
    本文小编为大家详细介绍“ps如何放大缩小图片”,内容详细,步骤清晰,细节处理妥当,希望这篇“ps如何放大缩小图片”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先新建一个桌布。新建后,将想要编辑的图片拖动到ps里...
    99+
    2023-07-02
  • ps如何缩放图片大小
    本文小编为大家详细介绍“ps如何缩放图片大小”,内容详细,步骤清晰,细节处理妥当,希望这篇“ps如何缩放图片大小”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。首先“新建”一个ps画布。新建完成后,将需要缩放的图片...
    99+
    2023-07-02
  • 如何用js实现手指缩放图片功能
    这篇“如何用js实现手指缩放图片功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用js实现手指缩放图片功能”文章吧。需...
    99+
    2023-06-26
  • 实现微信小程序中的图片放大缩小效果
    实现微信小程序中的图片放大缩小效果,需要具体代码示例在微信小程序中实现图片的放大缩小效果是一个常见需求,可以通过使用WXSS样式和WXSS样式来实现。下面将介绍具体的代码示例。1.在wxml文件中编写图片和相关的按钮组件:<view&...
    99+
    2023-11-21
  • php的H5网页端如何分享到微信中带图片和缩略图-微信卡片式分享-微信分享链接带图片
    php的H5网页端如何分享到微信中带图片和缩略图 首先先去公众号获取id和添加IP白名单 在这里插入图片描述 好了废话不多说直接上代码 ...
    99+
    2023-09-17
    php 微信 开发语言
  • Android实现通过手势控制图片大小缩放的方法
    本文实例讲述了Android实现通过手势控制图片大小缩放的方法。分享给大家供大家参考,具体如下: 该程序实现的是通过手势来缩放图片,从左向右挥动图片时图片被放大,从右向左挥动图...
    99+
    2022-06-06
    方法 图片 控制图 手势 Android
  • 如何使用Python批量缩放图片
    今天小编给大家分享一下如何使用Python批量缩放图片的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。导读为了解决图片被改变大...
    99+
    2023-06-29
  • Android应用中实现手势控制图片缩放的完全攻略
    一、概述 现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位~~~ 我相信看图的...
    99+
    2022-06-06
    图片 控制图 手势 Android
  • Android实现手势滑动多点触摸放大缩小图片效果
    网上文章虽多,但是这种效果少之又少,我真诚的献上以供大家参考 实现原理:自定义ImageView对此控件进行相应的layout(动态布局). 这里你要明白几个方法执行的流程: ...
    99+
    2022-06-06
    小图 图片 手势 Android
  • Android实现手势滑动多点触摸缩放平移图片效果
    现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位。 一、概述 想要做到图片支持...
    99+
    2022-06-06
    图片 手势 Android
  • HTML5 Canvas如何实现图片缩放比例
    小编给大家分享一下HTML5 Canvas如何实现图片缩放比例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! drawImage方法的又一变种是增加了两个用于控制图像在canvas中缩放...
    99+
    2024-04-02
  • Android实现手势滑动多点触摸缩放平移图片效果(二)
    上一篇已经带大家实现了自由的放大缩小图片,简单介绍了下Matrix;具体请参考:Android实现手势滑动多点触摸缩放平移图片效果,本篇继续完善我们的ImageView。 首先...
    99+
    2022-06-06
    图片 手势 Android
  • 微信小程序如何实现选择图片和放大预览图片功能
    这篇文章给大家分享的是有关微信小程序如何实现选择图片和放大预览图片功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。视频中,老师也是看着官方文档,为学生们讲解,微信提供了系统的方...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作