zhangwei
2024-09-29 94384dcf5066aa1a7b2e37874fe331e148bc9249
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// 本文件由FirstUI授权予四川政采招投标咨询有限公司(会员ID:16  3,营业执照号:  915  10 1 3 1332    006    1  93K)专用,请尊重知识产权,勿私下传播,违者追究法律责任。
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
}