js實(shí)現(xiàn)移動(dòng)端圖片瀏覽及縮放

需求:

1.圖片隨著手指滾動(dòng)

2.雙指縮放

3.自動(dòng)播放

實(shí)現(xiàn):移動(dòng)端中js有touch事件,touchstart、touchmove、touched,

隨手指滾動(dòng):touchstart 記錄手指起始位置,touchmove計(jì)算手指移動(dòng)位置,并把移動(dòng)位置賦值給視圖的transform?translateX

雙指縮放:touchstart中得到觸摸的兩個(gè)點(diǎn),touchmove中計(jì)算兩個(gè)點(diǎn)距離,并把距離值賦給視圖的transform?scale

自動(dòng)播放:設(shè)置定時(shí)器,在每幾秒執(zhí)行的方法中改變視圖的transform?translateX

自動(dòng)播放方法:

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);

? ? ? },

雙指縮放,滾動(dòng):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; //得到第二組兩個(gè)點(diǎn)

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

? ? ? ? ? ? var rotation = _this.getAngle(now[0], now[1]) - _this.getAngle(start[0], start[1]); //得到旋轉(zhuǎn)角度,getAngle是得到夾角的一個(gè)方法

? ? ? ? ? ? // 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); //執(zhí)行g(shù)esturemove方法

? ? ? ? ? };

? ? ? ? }, 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;

? ? ? }, //夾角方法

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容