使用AlloyFinger(移动端点触插件)
2017-09-20 15:31
316 查看
插件gitHub地址https://github.com/AlloyTeam/AlloyFinger
直接贴代码。这里主要是用pressMove 和 pinch 功能。
主要是实现2个联动所以才会这么多重复的代码。
首先是获得元素,最好使用id,用class的话要加[0](如果是第一个的话);
Transform是动画插件。所有的插件可以来这里下载。https://pan.baidu.com/s/1qXEnk3y
提取密码 7x23。
这里有几点需要提醒大家:
1.有几个需要缩放的容器,就需要Transform多少个。
2.如果需要设置缩放不从1开始,可以在multipointEnd的时候。设置
To是一个动画插件。可以限定拖动的区域。
直接贴代码。这里主要是用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是一个动画插件。可以限定拖动的区域。
相关文章推荐
- 移动端图片放大滑动查看-插件photoswipe的使用
- 使用jquery的imagecropper插件做用户头像上传 兼容移动端
- 移动端图片放大滑动查看-插件photoswipe的使用
- 移动端分享插件使用总结
- 移动端选择插件mobiscroll的使用demo
- 移动端JQ插件hammer使用详解
- vue 项目移动端使用淘宝自适应插件 环境配置
- 预加载(加载中) + 推荐移动端网页使用的图片懒加载(预加载)插件
- 学习使用jquery iScroll.js移动端滚动条插件
- vue移动端裁剪图片结合插件Cropper的使用
- LCalendar 移动端轻量级日期选择插件使用
- 使用移动端页面iScroll插件遇到的一个checkbox选择的问题
- 移动端分享插件使用总结
- 收集移动端HTML5/H5使用的插件
- 移动端下拉刷新、上拉加载更多插件dropload的使用
- 移动端dropload插件的使用
- `移动端布局``rem单位使用``flexible适配``gulp中的sass插件和bowsersync的使用
- 移动端JQ插件hammer使用详解
- [JS插件] pageSwitch 适合移动端整屏滚动效果的使用教程
- vue移动端裁剪图片结合插件Cropper的使用实例代码