转至:http://blog.sina.com.cn/s/blog_c342e3090102vcxu.html

1.手机端的图片选择和预览

《input type="file" id="preview"/》《img id="theImg"/》

var oBtn = document.getElementByIdx_x_x('preview');
    var oImg = document.getElementByIdx_x_x('theImg');
    oBtn.addEventListener('change', handleFileSelect, false);

function handleFileSelect(evt) {
        var files = evt.target.files;
        for (var i = 0, f; f = files[i]; i++) {
            if (!f.type.match('image.*')) {
                continue;
            }
            var reader = new FileReader();
            reader.onload = (function (theFile) {
                return function (e) {
                    oImg.style.width = '10em';
                    oImg.src = event.target.result;
                    oImg.style.display = "block";
                };
            })(f);
            reader.readAsDataURL(f);
        }
    }

2.手机端的两个手指缩放图片

《img src="http://www.jzqing.net/images/p9.jpg" id="img" style="width:100%;height:1000px;position:absolute;left:0;top:0;margin-top:0;"/》

//全局变量,触摸开始位置
            var startX = 0, startY = 0;
            var startX1 = 0, startY1 = 0;
            var startDis = 0;
            var dis = [];
            //touchstart事件
            function touchSatrtFunc(evt) {
                try {
                    dis = [];
                    evt.preventDefault();//用来阻止手机的默认事件
                }
                catch (e) {
                    alert('touchSatrtFunc:' + e.message);
                }
            }
            var theKey = 1;
            //touchmove事件,这个事件无法获取坐标
            function touchMoveFunc(evt) {
                try {
                  
                   // evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
                    var touch = evt.targetTouches[0]; //获取第一个触点
                    var x = Number(touch.pageX); //页面触点X坐标
                    var y = Number(touch.pageY); //页面触点Y坐标
                  
                    if (evt.targetTouches.length == 2) {
                        var touch1 = evt.targetTouches[1]; //获取第2个触点
                        var x1 = Number(touch1.pageX); //页面触点X坐标
                        var y1 = Number(touch1.pageY); //页面触点Y坐标
                        dis.push(Math.sqrt(Math.pow(x - x1, 2) + Math.pow(y - y1, 2)));
                    }
                    if (dis.length > 0) {
                        if (dis[0] > dis[dis.length - 1]) {
                            if (theKey <= 1) {
                                return false;
                            } else {
                                theKey -= 0.05;
                            }
                            document.getElementByIdx_x_x('img').style.webkitTransform = 'scale(' + theKey + ')';
                        } else {
                            theKey += 0.05;
                            document.getElementByIdx_x_x('img').style.webkitTransform = 'scale(' + theKey + ')';
                            return false;
                        }
                    }
                }
                catch (e) {
                  alert('touchMoveFunc:' + e.message);
                }
            }

//touchend事件
            function touchEndFunc(evt) {
                try {
                    evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动
                }
                catch (e) {
                    alert('touchEndFunc:' + e.message);
                }
            }

//绑定事件
            function bindEvent() {
                document.addEventListener('touchstart', touchSatrtFunc, false);
                document.addEventListener('touchmove', touchMoveFunc, false);
                document.addEventListener('touchend', touchEndFunc, false);
            }
           document.getElementByIdx_x_x('img').onload = bindEvent;

3.图片点击之后居中显示

《img src="http://www.jzqing.net/images/p9.jpg" id="img" style="width:100%;height:1000px;position:absolute;left:0;top:0;margin-top:0;"/》
方法:

//windows.innerWidth是查看手机端浏览器的有效可视高度

function clickFun(evt, obj) {
              var imgHeigt = windows.innerWidth * obj.height / obj.width; //获取大图片的高度
                if (imgHeigt >= window.screen.height) {
                    obj.style.top = 0;
                     obj.style.marginTop = 0;
                   } else {
                        obj.style.top = '50%';
                        obj.style.marginTop = -1 * imgHeigt / 2 + 'px';
                    }
              }
            document.getElementByIdx_x_x_x('img').addEventListener('click', function () { clickFun(event, this) }, false);

解释:

手机端的触屏事件的顺序是touchstart,touchmove,touchend,click,如果想要禁止click事件可以在touchstart时调用evt.preventDefault(); 来阻止之后的默认行为,但是如果想在响应手指滑动事件之后,还继续触发click事件,那么可以:不要在touchstart和touchend里面写preventDefault,只需要在touchmove里面写就可以了。

手机端图片预览和缩放js的更多相关文章

  1. [js开源组件开发]-手机端照片预览组件

    手机端照片预览组件 可怜的我用着华为3C手机,用别人现成的组件都好卡,为了适应我这种屌丝,于是自己简化写了一版的照片预览效果,暂时无缩放功能,以后可能有空再加吧,你也可以自己加下,这是个github上 ...

  2. 使用canvas实现图片预览、缩放(压缩)以及生成文件下载

    参考 https://www.runoob.com/html/html5-canvas.html https://www.cnblogs.com/yuanzhiguo/p/8288822.html h ...

  3. html input type=file 选择图片,图片预览 纯html js实现图片预览

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 【原创】iOS图片预览(支持缩放和移动)

    1.传入图片 PreViewController.h: #import <UIKit/UIKit.h> @interface PreViewController : UIViewContr ...

  5. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一般的上传没有问题,不过如果是上传图片,且需要预览的话,就力有不逮了,趁着闲暇时间,给上 ...

  6. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  7. previewImage.js图片预览缩放保存插件

    previewImage.js好用的图片预览缩放保存插件

  8. JS实现图片预览与等比缩放

    案例仅为图片预览功能,省略图片上传步骤,框架为easyui. HTML代码: @*text-align:center;水平居中 vertical-align: middle;display: tabl ...

  9. JS魔法堂之实战:纯前端的图片预览

    一.前言 图片上传是一个普通不过的功能,而图片预览就是就是上传功能中必不可少的子功能了.在这之前,我曾经通过订阅input[type=file]元素的onchange事件,一旦更改路径则将图片上传至服 ...

随机推荐

  1. C# 获取物理网卡Mac地址

    // <summary> /// 获取网卡物理地址 /// </summary> /// <returns></returns> public stat ...

  2. 笔记本电脑安装centos 7(转)

    1. 下载 CentOS 镜像 下载地址 : https://wiki.centos.org/Download, 我下载的是1406 2. 使用 UltraISo 将镜像刻录到U盘 UltraISo  ...

  3. solr亿万级索引优化实践(四)

    本篇是这个系类的最后一篇,但优化方案不仅于此,需要后续的研究与学习,本篇主要从schema设计的角度来做一些实践. schema.xml 这个文件的作用是定义索引数据中的域的,包括域名称,域类型,域是 ...

  4. 单元测试工具NUnit的使用

      使用 NUnit 工具来进行单元测试 首先在要创建一个单元测试的项目,通常在原有的解决方案中添加新项目, 在弹出的项目类型中选择单元测试,项目的命名一般情况下与解决方案的名称相同后加UnitTes ...

  5. python入门-异常

    1 报错的例子 print(5/0) 2跳过报错的例子 try: print(5/0) except ZeroDivisionError: print("You can't divide b ...

  6. CentOs - 使用ssh key远程登录

    环境: 服务器端CentOs,本地OS X 服务器端: 1. 安装openssl使实现ssl协议 2. 将本地的pub key加入信任列表 本地: 1. 生成pub key 2. 配置ssh别名使登陆 ...

  7. idea 安装 破解方法

    参考:https://blog.csdn.net/qq_27686779/article/details/78870816 (1)下载破解补丁 把下载的破解补丁放在你的idea的安装目录下的bin的目 ...

  8. 8. mybatis实战教程(mybatis in action)之七:实现mybatis分页(源码下载)

    转自:https://blog.csdn.net/tangruyi1992/article/details/52584012 上 一篇文章里已经讲到了mybatis与spring MVC的集成,并且做 ...

  9. 不丢失log的情况下迁移git空间

    背景: 原来的源码都放在个人的空间下,为了团队后续规范管理,建立了一个团队使用的空间,需要把旧空间的文件和提交记录,一起迁移. 方法:git remote 进行空间切换 1.查看当前空间名:git r ...

  10. delphi android路径 TPath 文件路径,文件管理

    获取Android相关文档路径 delphi 新路径.文件功能 IOUtils单元,文件路径,文件管理 http://docwiki.embarcadero.com/RADStudio/Berlin/ ...