.content {
width: 100%;
height: 100%;
position: relative;
.map {
position: absolute;
width: 100%;
height: 100%;
&:nth-child(2){
z-index: -1;
}
}
.vertical_line {
position: absolute;
top: 0%;
left: 48%;
bottom: 0%;
z-index: 1;
float: left;
width: 10px;
background-color: rgba(50, 50, 50, 0.75);
user-select: none;
}
.circle {
width: 30px;
height: 30px;
background-color: rgba(50, 50, 50, 0.75);
border-radius: 50%;
position: absolute;
top: 40%;
left: 40%;
bottom: 4.2%;
z-index: 2;
margin-left: -10px;
user-select: none;
}
.triangle-left {
width: 0;
height: 0;
border-top: 4px solid transparent;
border-right: 7px solid white;
border-bottom: 4px solid transparent;
position: absolute;
top: 40%;
margin-left: -8px;
margin-top: 12px;
z-index: 3;
user-select: none;
}
.triangle-right {
width: 0;
height: 0;
border-top: 4px solid transparent;
border-left: 7px solid white;
border-bottom: 4px solid transparent;
position: absolute;
top: 40%;
margin-left: 10px;
margin-top: 12px;
z-index: 3;
user-select: none;
}
}
<div class="content ">
<div id="view1" class="map"></div>
<div id='view2' class="map"></div>
<!-- 垂直分割线 -->
<div id="swipe_split_box">
<div id="vertical_line" class="vertical_line"></div>
<div id="swipe_circle" class="circle"></div>
<div id="swipe_triangle_left" class="triangle-left"></div>
<div id="swipe_triangle_right" class="triangle-right"></div>
</div>
</div>
rollerLoad() {
let that = this;
let ArcGISApi = that.ArcGISApi;
var esriContainerDiv = 'view1'
var esriSwipeContainerDiv = 'view2'
loadModules(modules, )
.then(that.TDTinstance)
.then(() => {
mapList['view1'] = new ArcGISApi.SceneView({
container: esriContainerDiv,
spatialReference: {
wkid: 4490
},
map: mapView,
zoom: 12,
camera: {
position: [117.012375, 36.62, 9000],
tilt: 30,
},
});
mapList['view2'] = new ArcGISApi.SceneView({
container: esriSwipeContainerDiv,
spatialReference: {
wkid: 4490
},
map: mapSecond,
zoom: 12,
camera: {
position: [117.012375, 36.62, 9000],
tilt: 30,
},
});
mapList['view1'].ui.components = [];
mapList['view2'].ui.components = [];
var isSlitLineDragging = false;
document.getElementById('swipe_split_box').onmousedown = function () {
isSlitLineDragging = true
}
document.getElementById('swipe_split_box').onmouseup = function () {
isSlitLineDragging = false
}
function pointMove(e) {
e.stopPropagation()
updateMapSwipeLocation(e.x)
};
function updateMapSwipeLocation(location, isInit) {
const swipeMap = document.getElementById(esriSwipeContainerDiv).getBoundingClientRect()
const offsetX = location;
if (isSlitLineDragging || isInit) {
document.getElementById(esriSwipeContainerDiv).style.cssText = 'clip:rect(0px,' + offsetX + 'px, ' + swipeMap.height + 'px,0px)';
document.getElementById(esriSwipeContainerDiv).style.zIndex = '1';
document.getElementById('vertical_line').style.left = (offsetX - 50 + (swipeMap.width * 0.024)) + 'px ';
document.getElementById('swipe_circle').style.left = (offsetX - 50 + (swipeMap.width * 0.024)) + 'px ';
document.getElementById('swipe_triangle_left').style.left = (offsetX - 50 + (swipeMap.width * 0.024)) + 'px ';
document.getElementById('swipe_triangle_right').style.left = (offsetX - 50 + (swipeMap.width * 0.024)) + 'px ';
}
};
function synchronizeView(view, others) {
others = Array.isArray(others) ? others : [others]
let viewpointWatchHandle
let viewStationaryHandle
let otherInteractHandlers
let scheduleId
const clear = function () {
if (otherInteractHandlers) {
otherInteractHandlers.forEach(function (handle) {
handle.remove()
})
}
viewpointWatchHandle && viewpointWatchHandle.remove()
viewStationaryHandle && viewStationaryHandle.remove()
scheduleId && clearTimeout(scheduleId)
otherInteractHandlers = viewpointWatchHandle = viewStationaryHandle = scheduleId = null
}
const interactWatcher = view.watch('interacting, animation', (newValue) => {
if (!newValue) {
return
}
if (viewpointWatchHandle || scheduleId) {
return
}
scheduleId = setTimeout(function () {
scheduleId = null
viewpointWatchHandle = view.watch('viewpoint', (newValue) => {
others.forEach(function (otherView) {
otherView.viewpoint = newValue
})
})
}, 0)
otherInteractHandlers = others.map(otherView => {
return ArcGISApi.WatchUtils.watch(otherView, 'interacting,animation',
(value) => {
if (value) {
clear()
}
}
)
})
viewStationaryHandle = new ArcGISApi.WatchUtils.whenTrue(view, 'stationary', clear)
})
return {
remove: function () {
this.remove = function () {}
clear()
interactWatcher.remove()
},
}
};
function synchronizeViews(views) {
let handles = views.map(function (view, idx, views) {
const others = views.concat()
others.splice(idx, 1)
return synchronizeView(view, others)
})
return {
remove: function () {
this.remove = function () {}
handles.forEach(function (h) {
h.remove()
})
handles = null
},
}
};
mapList['view1'].on('pointer-move', (e) => {
pointMove(e)
})
mapList['view2'].on('pointer-move', (e) => {
pointMove(e)
})
const swipeMap = document.getElementById(esriSwipeContainerDiv).getBoundingClientRect();
updateMapSwipeLocation(swipeMap.width * 0.5, true);
synchronizeViews([mapList['view1'], mapList['view2']])
})
},