126 lines
3.1 KiB
XML
126 lines
3.1 KiB
XML
// 本文件由FirstUI授权予佛山市航电梦联网络科技有限公司(会员ID:112 7,营业执照号:91 4 4 0 605 MA 556H1KX H)专用,请尊重知识产权,勿私下传播,违者追究法律责任。
|
||
var movable = {
|
||
width: 100,
|
||
height: 100,
|
||
disabled: false,
|
||
left: 0,
|
||
top: 0,
|
||
app: false
|
||
}
|
||
|
||
function isPC() {
|
||
if (typeof navigator !== 'object') return false;
|
||
var userAgentInfo = navigator.userAgent;
|
||
var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
|
||
var flag = true;
|
||
for (var v = 0; v < Agents.length - 1; v++) {
|
||
if (userAgentInfo.indexOf(Agents[v]) > 0) {
|
||
flag = false;
|
||
break;
|
||
}
|
||
}
|
||
return flag;
|
||
}
|
||
var isH5 = false
|
||
if (typeof window === 'object') isH5 = true
|
||
|
||
function setInitValue(dataset) {
|
||
movable.width = +dataset.width
|
||
movable.height = +dataset.height
|
||
movable.top = +dataset.top
|
||
movable.left = +dataset.left
|
||
//H5获取bool值为undefined
|
||
movable.disabled = (+dataset.disabled) == 1 ? true : false
|
||
movable.app = (+dataset.app) == 1 ? true : false
|
||
}
|
||
|
||
function touchstart(e, ins) {
|
||
var state = e.instance.getState()
|
||
var touch = e.touches[0] || e.changedTouches[0];
|
||
if (isH5 && isPC()) {
|
||
touch = e;
|
||
}
|
||
var dataset = e.instance.getDataset()
|
||
state.startX = touch.clientX
|
||
state.startY = touch.clientY
|
||
setInitValue(dataset)
|
||
}
|
||
|
||
function styleChange(left, top, ins) {
|
||
if (!ins) return;
|
||
var mview = ins.selectComponent('.fui-fab__btn-wrap');
|
||
if (!mview) return;
|
||
mview.setStyle({
|
||
transform: 'translate3d(' + left + 'px,' + top + 'px,0)'
|
||
})
|
||
}
|
||
|
||
function touchmove(e, ins, events) {
|
||
if (movable.disabled) return;
|
||
if (e.preventDefault) {
|
||
e.preventDefault()
|
||
}
|
||
if (movable.app && event && event.preventDefault && event.cancelable) {
|
||
event.preventDefault()
|
||
}
|
||
var state = {}
|
||
var touch = {}
|
||
if (isH5 && isPC()) {
|
||
touch = e;
|
||
if (events && events.instance) {
|
||
state = events.instance.getState()
|
||
}
|
||
} else {
|
||
touch = e.touches[0] || e.changedTouches[0]
|
||
state = e.instance.getState()
|
||
}
|
||
var pageX = touch.clientX;
|
||
var pageY = touch.clientY;
|
||
var left = pageX - state.startX + (state.lastLeft || 0);
|
||
left = left < -movable.left ? -movable.left : left;
|
||
left = left > movable.width ? movable.width : left;
|
||
state.startX = pageX
|
||
|
||
var top = pageY - state.startY + (state.lastTop || 0);
|
||
top = top < -movable.top ? -movable.top : top;
|
||
top = top > movable.height ? movable.height : top;
|
||
state.startY = pageY
|
||
|
||
state.lastLeft = left
|
||
state.lastTop = top
|
||
styleChange(left, top, ins)
|
||
}
|
||
|
||
var _movable = false;
|
||
|
||
function mousedown(e, ins) {
|
||
if (!isH5 || !isPC()) return
|
||
touchstart(e, ins)
|
||
_movable = true
|
||
window.onmousemove = function(event) {
|
||
if (!isH5 || !isPC() || !_movable) return
|
||
touchmove(event, ins, e)
|
||
}
|
||
window.onmouseup = function(event) {
|
||
if (!isH5 || !isPC() || !_movable) return
|
||
_movable = false
|
||
}
|
||
}
|
||
|
||
function fabreset(reset, oldreset, owner, ins) {
|
||
if (reset > 0) {
|
||
var state = ins.getState()
|
||
state.startY = 0;
|
||
state.startX = 0;
|
||
state.lastLeft = 0;
|
||
state.lastTop = 0;
|
||
styleChange(0, 0, owner)
|
||
}
|
||
}
|
||
|
||
module.exports = {
|
||
touchstart: touchstart,
|
||
touchmove: touchmove,
|
||
mousedown: mousedown,
|
||
fabreset: fabreset
|
||
} |