手機端圖片預覽和縮放js


轉至: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里面寫就可以了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM