如何使 Google 地图标记在 JavaScript 中再次反弹
How to make Google Maps marker bounce again in JavaScript
我希望我的 Google 地图标记保持弹跳。当它被拖动时,我希望它停止弹跳。当它停止被拖动时,我希望它再次开始弹跳。
代码如下:
var marker = new google.maps.Marker({
position: { lat: 0, lng: 0 },
map: map,
draggable: true,
animation: google.maps.Animation.BOUNCE
});
marker.addListener('dragend', function () {
marker.setAnimation(google.maps.Animation.BOUNCE);
});
marker.addListener('dragstart', function () {
marker.setAnimation(null);
});
问题是,当我停止拖动标记时,它会执行一次弹跳动画(大约一秒钟),然后标记不会像拖动前那样继续上下弹跳。
当我点击一个标记然后再次点击它时,我在另一个功能中遇到了同样的问题(第二次点击后它反弹一次并且不会继续反弹)。
它只会弹跳一次然后停止,但我希望它在 dragend
上继续上下弹跳(就像它在被拖动之前所做的那样),而不是弹跳一次就停止。
为什么它不继续播放动画以及如何修复它有什么想法吗?
似乎是 API 中的错误。可能值得在指向此问题的 issue tracker 中打开一个问题。
您可以通过使用 setTimeout
重新启动动画来解决此问题:
marker.addListener('dragend', function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
}, 1000);
});
好像有一段时间之前的动画是活跃的,但是结束的时候,只会反弹一次。
animation_changed
事件似乎也没有帮助(上一个动画停止时似乎没有触发)。
代码片段:
// The following example creates a marker in Stockholm, Sweden using a DROP
// animation. Clicking on the marker will toggle the animation between a BOUNCE
// animation and no animation.
var marker;
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 13,
center: {
lat: 59.325,
lng: 18.070
}
});
marker = new google.maps.Marker({
map: map,
draggable: true,
animation: google.maps.Animation.BOUNCE,
position: {
lat: 59.327,
lng: 18.067
}
});
marker.addListener('dragend', function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
}, 1000);
});
marker.addListener('dragstart', function() {
marker.setAnimation(null);
});
marker.addListener('animation_changed', function() {
console.log(marker.getAnimation());
})
}
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>
我希望我的 Google 地图标记保持弹跳。当它被拖动时,我希望它停止弹跳。当它停止被拖动时,我希望它再次开始弹跳。
代码如下:
var marker = new google.maps.Marker({
position: { lat: 0, lng: 0 },
map: map,
draggable: true,
animation: google.maps.Animation.BOUNCE
});
marker.addListener('dragend', function () {
marker.setAnimation(google.maps.Animation.BOUNCE);
});
marker.addListener('dragstart', function () {
marker.setAnimation(null);
});
问题是,当我停止拖动标记时,它会执行一次弹跳动画(大约一秒钟),然后标记不会像拖动前那样继续上下弹跳。
当我点击一个标记然后再次点击它时,我在另一个功能中遇到了同样的问题(第二次点击后它反弹一次并且不会继续反弹)。
它只会弹跳一次然后停止,但我希望它在 dragend
上继续上下弹跳(就像它在被拖动之前所做的那样),而不是弹跳一次就停止。
为什么它不继续播放动画以及如何修复它有什么想法吗?
似乎是 API 中的错误。可能值得在指向此问题的 issue tracker 中打开一个问题。
您可以通过使用 setTimeout
重新启动动画来解决此问题:
marker.addListener('dragend', function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
}, 1000);
});
好像有一段时间之前的动画是活跃的,但是结束的时候,只会反弹一次。
animation_changed
事件似乎也没有帮助(上一个动画停止时似乎没有触发)。
代码片段:
// The following example creates a marker in Stockholm, Sweden using a DROP
// animation. Clicking on the marker will toggle the animation between a BOUNCE
// animation and no animation.
var marker;
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 13,
center: {
lat: 59.325,
lng: 18.070
}
});
marker = new google.maps.Marker({
map: map,
draggable: true,
animation: google.maps.Animation.BOUNCE,
position: {
lat: 59.327,
lng: 18.067
}
});
marker.addListener('dragend', function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function() {
marker.setAnimation(google.maps.Animation.BOUNCE);
}, 1000);
});
marker.addListener('dragstart', function() {
marker.setAnimation(null);
});
marker.addListener('animation_changed', function() {
console.log(marker.getAnimation());
})
}
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>