摘要:PrintMyMap
前陣子看到朋友轉貼連結:PrintMyMap,感覺很有趣,於是看了看原始碼…呃… include了幾個檔,chrome的開發介面還不習慣,於是拿出習慣的 firebug…呃… 為什麼不支援火狐狸?排擠 IE可以瞭解,但是,為什麼不支援火狐狸?QQ
然後看了看 demo的影片,印出來的成品裁掉好多空白的地方…仿佛聽到了森林在哭泣……於是想到這個東西,但是試貼 google map的圖片上去卻試不出來…http://www.pocketmod.com/v2/ 明明就有 Image的選項…
反正,總之,最後,自己試寫了一個。
畫面截圖: 操作方式:
- 輸入地址按搜尋,可以試試 gmap的定址功能準不準…我找士林夜市它定到饒河夜市(?),我不知道要說什麼 ~_~
或是直接拉地圖到想列印的範圍。 - 選好範圍按「左上」、「右上」…那四個按鈕把地圖放進 A4的四塊角落。
(在地圖上亂點可以做記號…但是不能刪除XD,只能執行完步驟 2之後,再覆蓋掉同樣的區塊) - 列印…
然後發現 chrome居然沒有預覽列印 = =a
(因為 chrome而加了一個 hide,在 chrome列印完全不管指定的元素大小(明明就指定了幾mm),所以要先按 hide…)
firefox的列印結果跟預覽列印不一樣,文字方塊會隨機消失 囧a
No IE,誰叫它不支援 CSS旋轉,不是我排擠它。
關於技術方面的問題…就只是算版面位置吧;
.Left { -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); transform: rotate(90deg); }
會以元素中心旋轉,所以如果是正方形轉90度長寬不變,但是長方形就…要調一下。
做完發現…成品有點模糊 = =a,大概是瀏覽器跟印表機介接造成失真?還是因為 CSS旋轉所以更加嚴重?比較有價值的部分反而是在…折紙XD,一張 A4印四個小地圖只是調整排版而已,但是又不像 FinePrint縮小還是看的很清楚 = =;但是這種折法不只縮小體積,又不影響使用!所以結論是…這是做來自嗨的XDD
線上DEMO:http://fiddle.jshell.net/XzVnM/3/show/light/
原始碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta http-equiv="edit-Type" edit="text/html; charset=utf-8"> <script type='text/javascript' src='/js/lib/mootools-1.2.4-core-nc.js'></script> <link rel="stylesheet" type="text/css" href="/css/normalize.css"/> <link rel="stylesheet" type="text/css" href="/css/result-light.css"/> <style type='text/css'> body { background-color: transparent; padding: 10px; } #mapControl { position:absolute; left:200mm; } #map1 { width: 139.5mm; height: 96mm; } .A4 { /*210*297mm, padding 8mm*/ width: 194mm; height: 281mm; position: relative; margin:3mm 0 0 0; } .A4div4 { height: 96mm; /*長寬相反*/ width: 139.5mm; border: dotted 1mm #ccc; } .A4div4 input { position:absolute; width:100%; z-index:99999; } .A4div4 #logocontrol, .A4div4 div span, .A4div4 div a { display:none; } #left-top { position: absolute; left: -21.75mm; top: 21.75mm;/* (width-height)/2 */ } #right-top { position: absolute; right: -21.75mm; top: 21.75mm; } #left-bottom { position: absolute; left: -21.75mm; bottom: 21.75mm; } #right-bottom { position: absolute; right: -21.75mm; bottom: 21.75mm; } /*-webkit-transform: rotate(15deg) scale(1.25, 0.5);*/ .Left { -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); transform: rotate(90deg); } .Right { -webkit-transform: rotate(270deg); -moz-transform: rotate(270deg); transform: rotate(270deg); } </style> <script type='text/javascript'> //<![CDATA[ window.addEvent('load', function() { }); //]]> </script> </head> <body> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title></title></head> <body> <div id="mapControl"> <div id="map1" class="gmap"></div> </div> <div class="A4"> <div id="left-top" class="A4div4 Left gmap"></div> <div id="right-top" class="A4div4 Right gmap"></div> <div id="left-bottom" class="A4div4 Left gmap"></div> <div id="right-bottom" class="A4div4 Right gmap"></div> </div> <script type="text/javascript" src="http://www.google.com/jsapi?key=ABQIAAAA3Y25uutCzJdX6JfZIi5NEBSgRyJfKxvUsUDuKDID09Cb5D0_ORS7TOUjxFUXXmF-RGsIfiGQncriZA"></script> <script type="text/javascript"> google.load("maps", "2"); google.load("jquery", "1.4"); google.setOnLoadCallback(function() { var gmap = google.maps, myLatlng = new gmap.LatLng(25.019868829517605, 121.4660926273376), map = new gmap.Map(document.getElementById("map1")); map.addControl(new gmap.LargeMapControl()); map.addControl(new gmap.MapTypeControl()); map.setCenter(myLatlng); map.setZoom(15); var overlaysLatlng = []; gmap.Event.addListener(map, "click", function(overlay, latlng) { var marker = new gmap.Marker(latlng); overlaysLatlng.push(latlng); map.addOverlay(marker) }); var button = ["btn-left-top", "btn-right-top", "btn-left-bottom", "btn-right-bottom"], mapObj = {}, $div = $("<div>"); $.each(button, function(idx, obj) { var $button = $(["<input type='button' id='", obj, "' value='", obj, "' />"].join('')); $button.click(function() { var panId = obj.replace("btn-", ""); mapObj[obj] = mapObj[obj] || new gmap.Map(document.getElementById(panId)); var cache_map = mapObj[obj]; cache_map.clearOverlays(); cache_map.setCenter(map.getCenter(), map.getZoom()); $.each(overlaysLatlng, function(overlayIdx, latlng) { cache_map.addOverlay(new gmap.Marker(latlng)); }); overlaysLatlng = []; map.clearOverlays(); if ($("#geoText").val() != "") { $("#" + panId).prepend("<input type='text' value='" + $("#geoText").val() + "'>"); } }).appendTo($div); }); $otherDiv = $("<div>") $(["<label for='geoText'>搜尋地址:</label><input type='text' id='geoText' value='' />"].join('')).appendTo($otherDiv); $(["<input type='button' value='search' />"].join('')).click(function() { var addr = $("#geoText").val(), geo = new gmap.ClientGeocoder(); geo.getLatLng(addr, function(glatlng) { if (glatlng) { map.setCenter(glatlng); } }); }).appendTo($otherDiv); $otherDiv.appendTo($div); $('<input type="button" value="hide"/>').click(function(){ $('#mapControl').hide(); }).appendTo($div); $div.prependTo($("#mapControl")); }); </script> </body> </html> </body> </html>