插件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是一个动画插件。可以限定拖动的区域。
1779



被折叠的 条评论
为什么被折叠?



