如何在Here Maps API for JavaScript上实现类似谷歌地图的滚动行为?
我正在使用这里的MapsAPI for JavaScript,并试图在移动设备上实现类似于GoogleMap API的滚动行为 当我想通过触摸地图进行滚动时,不应总是阻止滚动页面,除非地图的拖动行为被禁用 我曾尝试使用从指针事件中提取的相应Y参数调用如何在Here Maps API for JavaScript上实现类似谷歌地图的滚动行为?,javascript,maps,here-api,Javascript,Maps,Here Api,我正在使用这里的MapsAPI for JavaScript,并试图在移动设备上实现类似于GoogleMap API的滚动行为 当我想通过触摸地图进行滚动时,不应总是阻止滚动页面,除非地图的拖动行为被禁用 我曾尝试使用从指针事件中提取的相应Y参数调用window.scroll(),但它不如浏览器的默认滚动平滑 我应该如何使用拖动或其他针对地图的事件来滚动页面?您可以通过以下方式允许在地图上滚动: 在dragstart上禁用地图的拖动行为并捕获Y坐标 在dragend上启用地图的拖动行为并捕获Y坐
window.scroll()
,但它不如浏览器的默认滚动平滑
我应该如何使用
拖动
或其他针对地图的事件来滚动页面?您可以通过以下方式允许在地图上滚动:
dragstart
上禁用地图的拖动行为并捕获Y坐标dragend
上启用地图的拖动行为并捕获Y坐标dragend
上的起始和结束Y坐标的差值滚动页面您可以通过以下方式允许在地图上滚动:
dragstart
上禁用地图的拖动行为并捕获Y坐标dragend
上启用地图的拖动行为并捕获Y坐标dragend
上的起始和结束Y坐标的差值滚动页面此代码应适用于您:
let mapevents = new mapsjs.mapevents.MapEvents(map),
behavior = new mapsjs.mapevents.Behavior(mapevents);
let startY, endY = 0;
map.addEventListener('dragstart', function(evt) {
if (evt.currentPointer.type == 'touch' && evt.pointers.length < 2) {
startY = evt.currentPointer.viewportY;
behavior.disable(H.mapevents.Behavior.DRAGGING);
}
});
map.addEventListener('drag', function(evt) {
if (evt.currentPointer.type == 'touch' && evt.pointers.length < 2) {
endY = evt.currentPointer.viewportY;
window.scrollBy(0, (startY - endY));
}
});
map.addEventListener('dragend', function(evt) {
behavior.enable(H.mapevents.Behavior.DRAGGING);
});
让mapevents=new-mapsjs.mapevents.mapevents(map),
行为=新的mapsjs.mapevents.behavior(mapevents);
设startY,endY=0;
map.addEventListener('dragstart',函数(evt){
if(evt.currentPointer.type='touch'&&evt.pointers.length<2){
startY=evt.currentPointer.viewportY;
禁用(H.mapevents.behavior.Draging);
}
});
map.addEventListener('drag',函数(evt){
if(evt.currentPointer.type='touch'&&evt.pointers.length<2){
endY=evt.currentPointer.viewportY;
scrollBy(0,(startY-endY));
}
});
map.addEventListener('dragend',函数(evt){
启用(H.mapevents.behavior.Draging);
});
在dragstart
和drag
回调中,仅当指针的类型为touch
且指针的数量为1时,才会禁用滚动。这使得在触摸设备上用两个手指以及在台式机/笔记本电脑上用鼠标缩放和平移地图成为可能
请注意,该方法
behavior.isEnabled(功能)
不会禁用该功能。为此,您需要使用行为。禁用(opt_功能)
请参见此代码适用于您:
let mapevents = new mapsjs.mapevents.MapEvents(map),
behavior = new mapsjs.mapevents.Behavior(mapevents);
let startY, endY = 0;
map.addEventListener('dragstart', function(evt) {
if (evt.currentPointer.type == 'touch' && evt.pointers.length < 2) {
startY = evt.currentPointer.viewportY;
behavior.disable(H.mapevents.Behavior.DRAGGING);
}
});
map.addEventListener('drag', function(evt) {
if (evt.currentPointer.type == 'touch' && evt.pointers.length < 2) {
endY = evt.currentPointer.viewportY;
window.scrollBy(0, (startY - endY));
}
});
map.addEventListener('dragend', function(evt) {
behavior.enable(H.mapevents.Behavior.DRAGGING);
});
让mapevents=new-mapsjs.mapevents.mapevents(map),
行为=新的mapsjs.mapevents.behavior(mapevents);
设startY,endY=0;
map.addEventListener('dragstart',函数(evt){
if(evt.currentPointer.type='touch'&&evt.pointers.length<2){
startY=evt.currentPointer.viewportY;
禁用(H.mapevents.behavior.Draging);
}
});
map.addEventListener('drag',函数(evt){
if(evt.currentPointer.type='touch'&&evt.pointers.length<2){
endY=evt.currentPointer.viewportY;
scrollBy(0,(startY-endY));
}
});
map.addEventListener('dragend',函数(evt){
启用(H.mapevents.behavior.Draging);
});
在dragstart
和drag
回调中,仅当指针的类型为touch
且指针的数量为1时,才会禁用滚动。这使得在触摸设备上用两个手指以及在台式机/笔记本电脑上用鼠标缩放和平移地图成为可能
请注意,该方法
behavior.isEnabled(功能)
不会禁用该功能。为此,您需要使用行为。禁用(opt_功能)
请参见您好,您可以添加一些屏幕截图来显示您想要实现的目标吗。下面是一个屏幕记录:。在这种情况下,通过调用this.behavior.isEnabled(H.mapevents.behavior.draging)
禁用拖动。我想要实现的是在地图上滚动。嗨,你能添加一些屏幕截图来显示你想要实现的内容吗?这里是一个屏幕记录:。在这种情况下,通过调用this.behavior.isEnabled(H.mapevents.behavior.draging)
禁用拖动。我想要实现的是在地图上滚动。