Pat*_*rlt 25 javascript animation google-maps
我想在谷歌地图上反弹一次.以下代码将使标记反弹,但它只是继续......
myPin.setAnimation(google.maps.Animation.BOUNCE);
Run Code Online (Sandbox Code Playgroud)
然后打电话
myPin.setAnimation(null);
Run Code Online (Sandbox Code Playgroud)
使动画停止.设置超时有效,但跳出的持续时间看起来不像是一个圆数,所以这样做
setTimeout(function(){ myPin.setAnimation(null); }, 1000);
Run Code Online (Sandbox Code Playgroud)
使弹跳动画过早结束并且看起来很糟糕.
有谁知道更好的方法来实现这一目标?
Sim*_*ger 32
一个简单的方法:谷歌的反弹动画在一个周期内似乎需要750毫秒.因此,只需将超时设置为750毫秒,动画就会在第一次反弹结束时完全停止.适用于FF 7,Chrome 14和IE 8:
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function(){ marker.setAnimation(null); }, 750);
Run Code Online (Sandbox Code Playgroud)
Mik*_*ael 10
目前没有内置动画可以弹跳一次.
如果你可以弹跳两次然后我强烈建议你使用它:
marker.setAnimation(4);
好的,鉴于API的局限性,其他答案都没有得到足够的效果.所以这就是我发现的.
js?v=3.13.marker.setAnimation(null)阻止标记弹跳.因此,如果您等到反弹序列中的710ms已过期然后设置marker.setAnimation(null),则API将继续执行额外的反弹而不会中断其当前的反弹序列.setAnimation(700)再次呼叫该标记,则会中断当前的跳出序列.不完全漂亮.简单案例(如其他答案所示):
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function () {
marker.setAnimation(null);
}, 700); // current maps duration of one bounce (v3.13)
Run Code Online (Sandbox Code Playgroud)
假如说:
您可以setTimout结合使用jquery的.queue方法来阻止新的退回请求中断当前的退回请求,但仍然将其排队以在当前完成之后执行跳出序列.(注意:我使用了两次反弹而不是一次,所以msec设置为1400).
更现实的案例:
// bounce markers on hover of img
$('#myImage').hover(function () {
// mouseenter
var marker = goGetMarker();
function bounceMarker()
{
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function ()
{
marker.setAnimation(null);
$(marker).dequeue();
}, 1400); // timeout value lets marker bounce twice before deactivating
}
// use jquery queue
if ($(marker).queue().length <= 1) // I'm only queuing up 1 extra bounce
$(marker).queue(bounceMarker);
}, function () {
// mouseleave
var marker = goGetMarker();
marker.setAnimation(null);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
34756 次 |
| 最近记录: |