You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.5 KiB
112 lines
2.5 KiB
import MAPAPP, { minScale, maxScale } from "./MAPAPP";
|
|
let map = null;
|
|
let initScale = 1;
|
|
Component({
|
|
/**
|
|
* 组件的属性列表
|
|
*/
|
|
properties: {
|
|
floororder: Number,
|
|
hidden: Boolean,
|
|
loc: Array,
|
|
searchType: Number,
|
|
},
|
|
data: {
|
|
loaded: false,
|
|
dpr: wx.getSystemInfoSync().pixelRatio,
|
|
shops: [],
|
|
floors: [],
|
|
pageHidden: false,
|
|
sliderValue: 0,
|
|
},
|
|
observers: {
|
|
hidden(val) {
|
|
if (val) {
|
|
wx.stopCompass({ fail: console.log });
|
|
if (map) {
|
|
map.shown = false;
|
|
}
|
|
} else {
|
|
wx.startCompass({ fail: console.log });
|
|
if (map) {
|
|
map.shown = true;
|
|
}
|
|
}
|
|
},
|
|
floororder(num) {
|
|
if (map && num !== null && num !== undefined && this.data.loaded)
|
|
map.changeFloor(num);
|
|
},
|
|
loc([x, y]) {
|
|
if (map) {
|
|
const crossPoint = map.cross({ x, y });
|
|
map.setXY(crossPoint.x, crossPoint.y);
|
|
try {
|
|
const { name } = map.getNearestPoint({
|
|
x,
|
|
z: y,
|
|
floorOrder: this.data.floororder,
|
|
});
|
|
this.triggerEvent("point", name);
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
}
|
|
},
|
|
},
|
|
lifetimes: {
|
|
attached() {},
|
|
detached() {
|
|
console.log("map2d detached");
|
|
map.dispose();
|
|
map = null;
|
|
},
|
|
ready() {
|
|
this.createSelectorQuery()
|
|
.select(".map2d")
|
|
.fields({
|
|
node: true,
|
|
size: true,
|
|
})
|
|
.exec((res) => {
|
|
map = new MAPAPP(res[0], this);
|
|
initScale = map.scale;
|
|
this.setData({
|
|
floors: map.mall.floors,
|
|
sceneIndex: map.mall.groundFloorIndex,
|
|
});
|
|
map.on("loaded", (map) => {
|
|
this.setData({ loaded: true });
|
|
if (typeof this.data.floororder === "number")
|
|
map.changeFloor(this.data.floororder);
|
|
this.triggerEvent("map", map);
|
|
});
|
|
});
|
|
},
|
|
moved: function () {},
|
|
},
|
|
pageLifetimes: {
|
|
hide() {
|
|
this.setData({ pageHidden: true });
|
|
},
|
|
show() {
|
|
this.setData({ pageHidden: false });
|
|
},
|
|
},
|
|
methods: {
|
|
handlePinch(e) {
|
|
if (map) {
|
|
let newScale = initScale * e.detail.zoom;
|
|
newScale = Math.max(minScale, newScale);
|
|
newScale = Math.min(maxScale, newScale);
|
|
map.scale = newScale;
|
|
}
|
|
},
|
|
handleMultitouchstart() {
|
|
initScale = map.scale;
|
|
},
|
|
handleTap() {
|
|
this.triggerEvent("exit");
|
|
},
|
|
},
|
|
});
|
|
|