您的位置:首页 > 移动开发

使用AlloyFinger(移动端点触插件)

2017-09-20 15:31 316 查看
插件gitHub地址https://github.com/AlloyTeam/AlloyFinger

直接贴代码。这里主要是用pressMove 和 pinch 功能。

var initScale = 1;
const mapEl = document.getElementById("map-element");
const imgEl = document.getElementById("hit");
const _timeout = 500;

Transform(mapEl);
Transform(imgEl);
new AlloyFinger(mapEl, {
pinch: function(evt) {
mapEl.scaleX = mapEl.scaleY = initScale * evt.zoom;
imgEl.scaleX = imgEl.scaleY = initScale * evt.zoom;
},
pressMove: function(evt) {
mapEl.translateX += evt.deltaX;
mapEl.translateY += evt.deltaY;

imgEl.translateX += evt.deltaX;
imgEl.translateY += evt.deltaY;

evt.preventDefault();
},
multipointEnd: function() {
To.stopAll();
if (mapEl.scaleX < 1) {

new To(mapEl, "scaleX", 1, 500, ease);
new To(mapEl, "scaleY", 1, 500, ease);

new To(imgEl, "scaleX", 1, 500, ease);
new To(imgEl, "scaleY", 1, 500, ease);
}
if (mapEl.scaleX > 4) {

new To(mapEl, "scaleX", 4, 500, ease);
new To(mapEl, "scaleY", 4, 500, ease);

new To(imgEl, "scaleX", 4, 500, ease);
new To(imgEl, "scaleY", 4, 500, ease);
}

let _minX = -(parseInt(mapEl.style.width) / 2)
if (mapEl.translateX < _minX) {
new To(mapEl, "translateX", _minX, _timeout, ease);
new To(imgEl, "translateX", _minX, _timeout, ease);
}

let _maxX = (parseInt(mapEl.style.width) / 2)
if (mapEl.translateX > _maxX) {
new To(mapEl, "translateX", _maxX, _timeout, ease);
new To(imgEl, "translateX", _maxX, _timeout, ease);
}

let _minY = -20;
if (mapEl.translateY < _minY) {
new To(mapEl, "translateY", _minY, _timeout, ease);
new To(imgEl, "translateY", _minY, _timeout, ease);
}

let _maxY = 50;
if (mapEl.translateY > _maxY) {
new To(mapEl, "translateY", _maxY, _timeout, ease);
new To(imgEl, "translateY", _maxY, _timeout, ease);
}
initScale = mapEl.scaleX;
}
})

function ease(x) {
return Math.sqrt(1 - Math.pow(x - 1, 2));
}

function moveTo(_storeId) {
let _point = polygonPoints[_storeId];
let _scale = 2;

let _center = getCenter(_point);
let _x = window.innerWidth - _center.deltaX * _scale;
let _y = 30;

highLight(_storeId);

new To(mapEl, "scaleX", _scale, _timeout, ease);
new To(mapEl, "scaleY", _scale, _timeout, ease);
new To(imgEl, "scaleX", _scale, _timeout, ease);
new To(imgEl, "scaleY", _scale, _timeout, ease);

new To(mapEl, "translateX", _x, _timeout, ease);
new To(mapEl, "translateY", _y, _timeout, ease);
new To(imgEl, "translateX", _x, _timeout, ease);
new To(imgEl, "translateY", _y, _timeout, ease);
}

function getCenter(_points) {
let _oddY = 0;
let _evenX = 0;
let _result = {
deltaX: 0,
deltaY: 0
};
for (let i in _points) {
if (i % 2 == 0) {
_evenX += _points[i];
} else {
_oddY += _points[i];
}
}

let _rate = $("#hit").width() / 1920;

_result.deltaY = Math.round(_oddY * _rate / (_points.length / 2))
_result.deltaX = Math.round(_evenX * _rate / (_points.length / 2))

return _result;
}


主要是实现2个联动所以才会这么多重复的代码。

首先是获得元素,最好使用id,用class的话要加[0](如果是第一个的话);

Transform是动画插件。所有的插件可以来这里下载。https://pan.baidu.com/s/1qXEnk3y

提取密码 7x23。

这里有几点需要提醒大家:

1.有几个需要缩放的容器,就需要Transform多少个。

2.如果需要设置缩放不从1开始,可以在multipointEnd的时候。设置

initScale = mapEl.scaleX;


To是一个动画插件。可以限定拖动的区域。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  移动端 缩放动画