基於Skyline Terra Exploere6.6消息事件和clipboardJS插件實現Terra Explorer 6.6彈出視窗剪切板功能。Terra Explorer 7.0已經預設支持右鍵複製,無特殊要求的話可以不用自己實現。 ...
前段時間繼續下來的基於Skyline的B/S項目,是基於Terra Explorer6.6實現的。項目中涉及到基於三維模型查詢設備編碼等操作,從用戶友好角度來講,查詢到的設備編碼應該要支持複製,方便用戶基於編碼的二次查詢和操作。
1. Terra Explorer彈出視窗限制
通常來說,在瀏覽器中複製頁面內容,是由瀏覽器右鍵支持的,雖然格式和內容我們不能定製,但是也能滿足要求。但是在TE彈出不支持右鍵複製,右鍵菜單有,但是內容複製不出來。
2. clipboard.js輕量級實現剪切板js插件
clipboard.js 是一個不需要flash,將文本複製到剪貼板的js插件。用法很簡單,這裡使用其中的一種方法:
<!--html代碼-->
<button id="mapclipboard_btn" data-clipboard-action="copy" data-clipboard-text="">複製</button>
//實例化剪切板對象
var clip = new Clipboard('#mapclipboard_btn');
這種形式的使用思路是,觸發mapclipboard_btn
按鈕的click事件後,clipboardJS插件將data-clipboard-text
屬性的內容複製到剪切板。這樣我們可以在觸發按鈕click事件前,設置好要複製到剪切板的內容。
3. 結合cliboard.js的Terra Explorer彈出視窗剪切板功能實現
這裡我們使用clipboardJS插件,結合TE的消息機制實現彈出視窗剪切板功能。
首先,在主頁面中加入2中代碼,實例化剪切板對象;
其次,在TE彈出視窗,增加複製按鈕,併在觸發複製按鈕時,使用TE介面發送複製文本消息;
<!--彈出視窗複製按鈕-->
<input id="text" style="width: 55%; height: 20px;"/>
<button id="copy" style="width: 35%; height: 25px;">
複製
</button>
//複製按鈕單擊事件
$("#copy").click(function () {
var text = $("#text");
sgworld.Window.ShowMessageBarText(text);
});
最後,在主頁面中添加消息處理代碼,添加剪切板內容
sgworld.AttachEvent("OnSGWorldMessage", function (messageId, sourceObjectId) {
var clipboardText = messageId;
$("#mapclipboard_btn").attr("data-clipboard-text", clipboardText);
$("#mapclipboard_btn").trigger("click");
return true;
}
如果OnSGWorldMessage已經在使用,可以通過條件消息類型的方式與其他消息進行區分。至此,就實現了TE6.6中彈出視窗簡單的剪切板功能。
4. 7.0.1已經支持彈出視窗內容的複製
在寫這篇博客時由於要使用TE7.0.1的新特性和功能,系統已經升級到TE7.0.1。順手一點右鍵複製,發現是有效的。看來老外也註意到了這個問題,已經解決了。雖然右鍵複製不是那麼友好,無法定製格式和內容,但是畢竟可以選什麼複製什麼,也算是很實用的。
寫在最後
最近早上上班總要把博客園首頁感興趣的最多推薦、最多評論、新聞頭條、推薦新聞看一下。一方面是因為手頭項目越來越讓人頭疼,陷入了孤軍奮戰、推進困難的窘境。另一方面也在想轉眼自己已經工作將近五年了,也要邁入30歲了,有點焦慮。總覺得自己技術還可以,學習能力還不錯,但是第一次跳槽後,總感覺再也找不到適合自己的工作了。一年有大半年在外出差,現場開發、調試,租的房子好像就是用來放行李的。每每回到自己base地,躺在床上,總不想再出差了。
出差與不出差的交織,也使本來就定力不好的我,變得懶惰,形不成好的習慣。每每是剛剛習慣了跑步,剛剛學個新東西到了一半,就會被出差或者回公司打斷。回頭看看在園子里轉了5年,也沒有留下些什麼,自己也不知道自己沉澱了什麼,積累了什麼。於是,總想寫點什麼,不知道是擔心,還是想發泄。
真的不想一個人,很懷念剛工作的時候。6、7個人住在北京的兩室一廳,一起上下班,一起玩游戲,一起學習,玩的快樂,工作有勁,相互學習,相互進步。