2025-08-02 12:49:52 +08:00

151 lines
3.4 KiB
XML

var sliderWidth = 200;
var blockWidth = 32;
var errorRange = 5;
var angle = 0;
var disabled = false;
var type = 1;
function bool(str) {
return str === 'true' || str == true ? true : 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 touchstart(e, ins) {
var state = e.instance.getState()
var touch = {}
if (isH5 && isPC()) {
touch = e;
} else {
touch = e.touches[0] || e.changedTouches[0]
}
var dataset = e.instance.getDataset()
state.startX = touch.pageX
sliderWidth = +dataset.width
blockWidth = +dataset.height
errorRange = +dataset.errorrange
angle = +dataset.angle
type = +dataset.type
disabled = bool(dataset.disabled)
}
function styleChange(left, deg, ins) {
if (!ins) return;
var block = ins.selectComponent('.tui-slider_block');
var image = ins.selectComponent('.tui-verify__image')
if(!block || !image) return;
if (left === 0) {
block.addClass('tui-block__trans')
image.addClass('tui-block__trans')
} else {
block.removeClass('tui-block__trans')
image.removeClass('tui-block__trans')
}
block.setStyle({
transform: 'translate3d(' + left + 'px,0,0)'
})
image.setStyle({
transform: 'rotate(' + deg + 'deg)'
})
}
function touchmove(e, ins, event) {
if (disabled) return;
var state = {}
var touch = {}
if (isH5 && isPC()) {
touch = e;
state = event.instance.getState()
} else {
state = e.instance.getState()
touch = e.touches[0] || e.changedTouches[0]
}
var pageX = touch.pageX;
var left = pageX - state.startX + (state.lastLeft || 0);
left = left < 0 ? 0 : left;
var width = sliderWidth - blockWidth;
left = left >= width ? width : left;
state.startX = pageX
state.lastLeft = left
var deg = 360 / width * left + angle
styleChange(left, deg, ins)
}
function touchend(e, ins, event) {
if (disabled) return;
var state = {}
if (isH5 && isPC()) {
state = event.instance.getState()
} else {
state = e.instance.getState()
}
var left = sliderWidth - blockWidth
var deg = 360 / left * state.lastLeft + angle
if (type == 1) {
if (Math.abs(deg - 360) <= errorRange || Math.abs(deg) <= errorRange) {
styleChange(state.lastLeft, deg, ins)
ins.callMethod('success')
} else {
state.startX = 0;
state.lastLeft = 0;
styleChange(0, angle, ins)
ins.callMethod('error')
}
} else {
ins.callMethod('result', {
angle: deg - angle
})
}
}
function slidereset(reset, oldreset, owner, ins) {
var state = ins.getState()
var dataset = ins.getDataset()
if (reset > 0) {
state.startX = 0;
state.lastLeft = 0;
var angle = +dataset.angle
styleChange(0, angle, owner)
}
}
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
touchend(event, ins, e)
movable = false
}
}
module.exports = {
touchstart: touchstart,
touchmove: touchmove,
touchend: touchend,
mousedown: mousedown,
slidereset: slidereset
}