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

来源:互联网 发布:js遍历二维数组 编辑:程序博客网 时间:2024/06/16 03:48

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

原创粉丝点击