需求:
1,实现表格区域的缩放,而不是整个页面。整个页面包含toolbar + table。 其中只缩放table区域

2,已用户操作处进行缩放,而不是固定的某个点,例如中心点,或左上角,笔记缩放时,数据跳动

实现的基本原理:

利用transform-origin,来确定进行缩放的固定点,也就是用户进行缩放的点, 同时利用transform:scale(value)来实现缩放

踩过的坑:

1,如果计算用户实际操作时,所选取的进行缩放的固定点:

读取用户两个手指的touch点,之后通过手指间的计算中心点,作为缩放的固定点,公式如下:

scalePointX = (touch1.X + touch2.X) / 2 - targetTable.X;

scalePointY = (touch1.Y + touch2.Y) / 2 -targetTable.Y;

2, 当scale不为零时,修改transform-origin,会导致按照新的固定点,从新scale,这就会导致表格移动

为了避免用户对于表格移动的感知,需要在设置完transform-origin之后,将表格移动回到之前的数据的位置。

这里的坑最深,因为scale的加入,导致坐标系和实际的位置,产生了差异,举个例子,table在scale之前,坐标是(0,0),之后以(0,0)作为固定点,放大。这个时候,看到是原来的左上角,因为放大,而像左上方放生了移动,那么这个时候,坐标系到底放生了什么变化?   这里我们利用JQuery可以发现:
    1)坐标系没有发生变化,也就是css('left')和css('top')保持不变

2)但 JQuery.position()却发生了变化,left和top变成了负值

也就是说,利用JQuery里css和position属性,在scale时的不同表现,我们可以 利用position在修改transform-origin前后的变化,计算出表格在视觉上发生的移动,之后通过这个值,反向设置css里的left和top值,实现把表格移动回到原来视图位置,使得用户感知不到因为transform-origin的变化,而导致的表格移动。

moveOnX = originalPosition.left - currentPosition.left;
        moveOnY = originalPosition.top - currentPosition.top;
        targetTable.css('left', <originalX> + moveOnX);
        targetTable.css('top', <originalY> + moveOnY);

JAVAScript:mobile端,基于transform-origin和tranform(scale),实现表格缩放相关推荐

  1. 基于webpack的PC端和mobile端开发以及生产环境的搭建

    我们用webpack做单页面应用开发应该尝试过很多次了,如果在同一个项目需要支持PC端和移动端,做成多页面应用,开发时能根据请求的终端返回不同的内容,应该怎么做呢?以下描述的是我尝试的一种方案,并且以 ...

  2. 魔坊APP项目-16-种植园、websocket协议、服务端基于socket提供服务(基于房间管理分发信息)、种植园页面展示

    种植园 我们需要完成的种植园,是一个互动频繁,并且要求有一定即时性的模块,所以如果继续基于http协议开发,那么需要通过ajax发送大量http请求,同时因为http本身属于单向通讯,所以服务端无法主 ...

  3. android 混音 源码,FFmpegAndroid android 端基于 FFmpeg 实现音频剪切、拼接、转码、混音、编解码;视频剪切、水印、截图、转码、编 @codeKK c开源站...

    android 端基于 FFmpeg 库的使用 添加编译 ffmpeg.shine.mp3lame.x264 源码的参考脚本 目前音视频相关处理: 音频剪切.拼接 音频混音 音频转码 音视频合成 音频 ...

  4. JavaScript - 移动端开发经典教程-李游Leo-专题视频课程

    JavaScript - 移动端开发经典教程-20人已学习 课程介绍         JavaScript是前端工程师的脚本语言技能之一,而移动端相对于传统的PC端开发,有着许多不同之处. 而随着HT ...

  5. css pc和mobile,初识pc端和mobile端CSS适配利器—vw+rem+CSS locks

    前言 大概五月份的时候,我下定决心写自己的博客系统,于是断断续续花了近一个月的时间琢磨Nestjs,写完了接口部分.六月份因为工作的原因就搁置了,说来也惭愧,直到九月中旬,才将它拾起.半个月后,后台部 ...

  6. NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    2019独角兽企业重金招聘Python工程师标准>>> 前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目 ...

  7. 移动端基于Vant组件封装底部弹出搜索多选列表

    移动端基于Vant组件封装底部弹出搜索多选列表: 效果图如下: 点击确定后赋值给表单 使用到的组件:van-popup,van-search 组件页面代码:searchDataPopup.vue &l ...

  8. SimpleQQ – WebQQ 桌面端 基于WebQQ 1.00内核

    SimpleQQ – WebQQ 桌面端 基于WebQQ 1.00内核 本帖最后由 fdsajhg 于 2010-10-13 18:14 编辑 SimpleQQ – WebQQ 桌面端 开发网址:   ...

  9. SimpleQQ – WebQQ 桌面端 基于----WebQQ 2.00内核

    SimpleQQ – WebQQ 桌面端 基于----WebQQ 2.00内核 SimpleQQ – WebQQ 桌面端 基于WebQQ 2.00内核 本帖最后由 fdsajhg 于 2010-10- ...

  10. css3transform rotate,CSS3详解:transform [旋转rotate、扭曲skew、缩放scale和移动translate以及矩阵变形matrix]...

    CSS3详解:transform [旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix] transform的属性包括:rotate() / skew() ...

最新文章

  1. mysql如何插入新的字段_Mysql 如何 得到新插入的字段ID
  2. Android之BroadcastReceiver的使用
  3. mysql二进制升级_MySQL二进制安装,升级,多实例部署
  4. java resultset 映射到实例_[Java]ResultSet的用法与实例
  5. 惊呆了!不改一行 Java 代码竟然就能轻松解决敏感信息加解密
  6. Debian下RPM包安装
  7. openssh漏洞_技术干货 | OpenSSH命令注入漏洞复现(CVE202015778)
  8. CentOS7安装Redis,全网最快安装教程
  9. js中短路运算符 ||
  10. 创业者如何防止合伙股东退出,给公司造成损失?
  11. 32位系统和x86的关系?
  12. 微软从 Engine Yard 手中收购容器平台 Deis
  13. OSN 3500 SDH智能光传输系统整机与单板技术分享
  14. 手机浏览器,QQ通讯组件无法唤醒QQ客户端
  15. 推荐(笔记软件、日程安排软件)
  16. 我们一起学 ABAP (01) ~ 初识SAP ABAP
  17. 或许生活并没有那么糟
  18. C#中“public string Name { get; set; }”什么意思?
  19. 计算机键盘操作与基本指法,实验一 计算机基本操作及指法练习
  20. 京东向上的力量:初心不改,传递信赖

热门文章

  1. shell编程实现一些小游戏
  2. 2022年最新浙江道路运输安全员真题题库及答案
  3. P1567 统计天数
  4. python利用浏览器执行js_浏览器如何执行JS
  5. 西部数据助手mysql_户外摄影存储好助手 西部数据My Passport Wireless SSD测评
  6. 简易炸弹超人 题解(蓝桥杯中级组2023选拔赛)
  7. Web实现:完整版垃圾分类网站 html+css 内含效果图
  8. 简信CRM:企业需要定制CRM系统的三大理由
  9. SSM框架练手项目【虎牙个人博客】手把手带你搭建自己的个人博客
  10. android gps定位工具类,Android原生GPS和网络定位工具类