亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

基于CSS和JavaScript創(chuàng)建動(dòng)畫(huà)式谷歌地圖標(biāo)記

原創(chuàng) 2016-11-10 11:21:44 542
摘要:谷歌地圖API允許web開(kāi)發(fā)人員僅僅使用幾行代碼就可以通過(guò)其神奇的內(nèi)置功能創(chuàng)建卓越的用戶體驗(yàn)。然而,它也存在一個(gè)明顯的不足——在映射標(biāo)記方面缺乏靈活性和創(chuàng)造性。一、 簡(jiǎn)介谷歌地圖API允許web開(kāi)發(fā)人員僅僅使用幾行代碼就可以通過(guò)其神奇的內(nèi)置功能創(chuàng)建卓越的用戶體驗(yàn)。然而,它也存在一個(gè)明顯的不足——在映射標(biāo)記方面缺乏靈活性和創(chuàng)造性。當(dāng)然,你可以添加自定義標(biāo)記圖像、工具提示和相應(yīng)的標(biāo)簽,但所有這些都是靜

谷歌地圖API允許web開(kāi)發(fā)人員僅僅使用幾行代碼就可以通過(guò)其神奇的內(nèi)置功能創(chuàng)建卓越的用戶體驗(yàn)。然而,它也存在一個(gè)明顯的不足——在映射標(biāo)記方面缺乏靈活性和創(chuàng)造性。

一、 簡(jiǎn)介

谷歌地圖API允許web開(kāi)發(fā)人員僅僅使用幾行代碼就可以通過(guò)其神奇的內(nèi)置功能創(chuàng)建卓越的用戶體驗(yàn)。然而,它也存在一個(gè)明顯的不足——在映射標(biāo)記方面缺乏靈活性和創(chuàng)造性。

當(dāng)然,你可以添加自定義標(biāo)記圖像、工具提示和相應(yīng)的標(biāo)簽,但所有這些都是靜態(tài)的、以面向文本的方式進(jìn)行交互。此外,并不存在某種標(biāo)準(zhǔn)的方法來(lái)創(chuàng)建響應(yīng)用戶操作的交互式標(biāo)記。

1.jpg

我簡(jiǎn)直不滿足于此,所以著手尋找一種創(chuàng)建真正獨(dú)特的映射方法。

本文正是想向你展示這種真正獨(dú)特的標(biāo)記映射方法。具體地說(shuō),我要向各位展示如何使用CSS3動(dòng)畫(huà)技術(shù)來(lái)標(biāo)記地圖?;诖思夹g(shù),你可以讓標(biāo)記跳舞、扭動(dòng)和隱藏,直至其能夠以優(yōu)雅的方式跳出熒屏。

如果用戶懸停在標(biāo)記上,單擊它或在地圖外使用切換,你將能夠使用任何CSS動(dòng)畫(huà)使其“復(fù)活”。本文將向你介紹一種簡(jiǎn)單的策略,你可以在你的任何項(xiàng)目中使用這種動(dòng)畫(huà)標(biāo)記。作為你的比較參考,另外兩個(gè)例子——Ryan Connolly(http://jsfiddle.net/ryanoc/86Ejf/)和Felipe Figueroa(http://bl.ocks.org/amenadiel/f4e5bd78b214ff081254)都使用了類似于此的方法。

二、基礎(chǔ)知識(shí)

你僅需要使用下面介紹的幾個(gè)步驟即可為你地圖上的標(biāo)記添加CSS動(dòng)畫(huà)效果支持。

(一) 第一步

在你的標(biāo)記上添加一幅圖像。下面是你指定圖像的代碼方式:

var catIcon = { 
    url: myImageURLhere, 
    //state your size parameters in terms of pixels 
    size: new google.maps.Size(70, 60), 
    scaledSize: new google.maps.Size(70, 60), 
    origin: new google.maps.Point(0,0) 
}

(二) 第二步

在標(biāo)記聲明中把參數(shù)optimized設(shè)置為false。這可以讓你把每一個(gè)標(biāo)記渲染為一個(gè)獨(dú)立的DOM元素:

var marker = new google.maps.Marker({ 
    position:latLng, 
    map: map, 
    // set the icon as catIcon declared above  
    icon: catIcon, 
    // must use optimized false for CSS 
    optimized: false 
});

(三) 第三步

創(chuàng)建一個(gè)overlayView對(duì)象,它負(fù)責(zé)把所有標(biāo)記組織到一個(gè)面板中,然后你可以從DOM中訪問(wèn)這個(gè)overlayView對(duì)象。請(qǐng)參考下面的代碼:

var myoverlay = new google.maps.OverlayView(); 
    myoverlay.draw = function () { 
        this.getPanes().markerLayer.id='markerLayer'; 
    }; 
myoverlay.setMap(map);

在上面代碼調(diào)用getPanes()函數(shù)一行中,我們給標(biāo)記層指定了一個(gè)id,這樣就可以在CSS中使用它。這個(gè)overlayView對(duì)象將自動(dòng)收集不在另一個(gè)圖層中的任何標(biāo)記。當(dāng)然,在本例中,并沒(méi)有提供其他層,因此此對(duì)象收集的是所有標(biāo)記。

(四) 第四步

現(xiàn)在,我們使用CSS技術(shù)來(lái)實(shí)現(xiàn)把當(dāng)前層中的所有標(biāo)記添加動(dòng)畫(huà)效果。這種動(dòng)畫(huà)效果可以是只發(fā)生一次的,也可以是繼續(xù)不斷地發(fā)生的。請(qǐng)參考下面代碼:

#markerLayer img { 
  animation: pulse .5s infinite alternate; 
  -webkit-animation: pulse .5s infinite alternate; 
  transform-origin: center; 
  -webkit-transform-origin: center; 
}

三、更加靈活的設(shè)置

使用上面的步驟會(huì)讓你立即將動(dòng)畫(huà)添加到所有標(biāo)記上。在本節(jié)中,我們?cè)賮?lái)學(xué)習(xí)另外幾個(gè)選項(xiàng)來(lái)更好地控制動(dòng)畫(huà)標(biāo)記。

(一) 外部切換

比如說(shuō),你想要包括一個(gè)圖例或一些可點(diǎn)擊的切換按鈕,以便用戶可以顯示和隱藏不同的圖層,或想使標(biāo)記具有某種特征從而更改其相應(yīng)的CSS動(dòng)畫(huà)。所有這些想法都是很容易實(shí)現(xiàn)的!你只需使用一個(gè)jQuery.click()處理器函數(shù)即可,請(qǐng)參考如下代碼片斷:

$('.btn').click(function(){ 
   $('#markerLayer img').css('animation', 'myAnimationOptionsHere'); 
   $('#markerLayer img').css('-webkit-animation', 'myAnimationOptionsHere') 
})

(二)創(chuàng)建click/hover事件

當(dāng)用戶將鼠標(biāo)懸停在一個(gè)標(biāo)記或單擊它時(shí)想要添加一個(gè)簡(jiǎn)短的動(dòng)畫(huà)嗎?那也不難。首先,創(chuàng)建一個(gè)全局?jǐn)?shù)組來(lái)存儲(chǔ)所有的標(biāo)記:

var allMarkers=[];

然后,當(dāng)你聲明每一個(gè)標(biāo)記時(shí),添加一個(gè)title屬性并把它轉(zhuǎn)換為字符串類型:

var marker = new google.maps.Marker({ 
    position:latLng, 
    map: map, 
    icon: catIcon, 
    optimized: false, 
    title: allMarkers.length.toString() 
});

接下來(lái),添加一個(gè)依賴于數(shù)組長(zhǎng)度的title屬性,從而為每一個(gè)標(biāo)記創(chuàng)建一個(gè)獨(dú)一無(wú)二的id。最后,使用如下代碼把標(biāo)記添加到數(shù)組中:

allMarkers.push(marker);

最后,我們來(lái)看一下click和hover事件的實(shí)現(xiàn)代碼。注意:我們通過(guò)使用單個(gè)標(biāo)題標(biāo)識(shí)符來(lái)標(biāo)識(shí)每個(gè)標(biāo)記:

google.maps.event.addListener(marker, 'click', function() { 
  var thisTitle= Number(this.title); 
  $('#markerLayer img').eq(thisTitle).css()... 
}) 
google.maps.event.addListener(marker, 'mouseover/mouseout', function() { 
  var thisTitle= Number(this.title); 
  $('#markerLayer img').eq(thisTitle).css()... 
})

(三) 針對(duì)不同標(biāo)記使用不同動(dòng)畫(huà)效果

我們不妨考慮把兩個(gè)單獨(dú)的標(biāo)記類型添加到一張地圖中的情形:棒球場(chǎng)地和足球場(chǎng)地。因?yàn)閮烧叨甲詣?dòng)包括在你創(chuàng)建的覆蓋層,你需要通過(guò)某種方法實(shí)現(xiàn)把獨(dú)立的動(dòng)畫(huà)效果應(yīng)用于不同的標(biāo)記。這是很容易做到的!只需要在你的CSS中使用src屬性并使用各自標(biāo)記對(duì)應(yīng)的圖像URL來(lái)匹配就可以了。請(qǐng)參考下面代碼:

#markerLayer img[src='/img/myURLpath'] { 
    animation: pulse .5s infinite alternate; 
    -webkit-animation: pulse .5s infinite alternate; 
    transform-origin: center; 
    -webkit-transform-origin: center; 
}

四、小結(jié)

作為一名開(kāi)發(fā)人員或設(shè)計(jì)師,你的主要工作是開(kāi)發(fā)出您的用戶喜歡的產(chǎn)品。事實(shí)上,他們已經(jīng)在正使用的產(chǎn)品中見(jiàn)過(guò)很多的谷歌地圖應(yīng)用。現(xiàn)在,由你來(lái)滿足他們的更熱切的期望吧!

最后,提供幾種使用地圖標(biāo)記動(dòng)畫(huà)來(lái)滿足您的用戶需求的途徑:

  • 如果你擁有模擬實(shí)際事物(如貓)的標(biāo)記圖像,那么,你可以使用一個(gè)對(duì)應(yīng)的CSS動(dòng)畫(huà)來(lái)模擬自然的運(yùn)動(dòng)。

  • 如果你的地圖標(biāo)記圖像并非實(shí)際移動(dòng)的物體(例如柜臺(tái)),那么你可以使用CSS動(dòng)畫(huà)效果來(lái)模仿當(dāng)點(diǎn)擊它們時(shí)這些圖像表現(xiàn)得很興奮,例如跳躍或者打顫的動(dòng)畫(huà)效果。

  • 如果你擁有對(duì)應(yīng)于每個(gè)標(biāo)記的數(shù)據(jù),那么你可以使標(biāo)記相應(yīng)于這些數(shù)據(jù)作出反應(yīng)。例如,你可以標(biāo)記出交通繁忙的十字路口:你可以把一個(gè)閃爍的感嘆號(hào)放在這些地方。

試試看吧,努力堅(jiān)持下去,你的用戶群肯定會(huì)紛至沓來(lái)!


發(fā)布手記

熱門詞條