學習Ajax架構之dojo:第十二節——Dojo的General Widget(下)(附原始碼)

來源:互聯網
上載者:User

接學習Ajax架構之dojo:第十一節——Dojo 的General Widget(上),現在來看一下其他的widget的用法。

 

1. Fisheye:“魚眼”動畫效果

Fisheye是一個比較特殊的動畫效果,當滑鼠靠近表徵圖時,表徵圖的尺寸會越來越大,最終達到如下的:

 

   

引入FisheyeList包:dojo.require("dojo.widget.FisheyeList")

接著,我們一起看一下範例程式碼:

<div dojoType="FisheyeList"
 itemWidth="40" itemHeight="40"
 itemMaxWidth="150" itemMaxHeight="150"
 orientation="horizontal"
 effectUnits="2"
 itemPadding="10"
 attachEdge="center"
 labelEdge="bottom"
 conservativeTrigger="true"
>

      <div dojoType="FisheyeListItem"
            id="item1b"
            onclick="alert('click on' + this.caption + '(from widget id ' + this.widgetId + ')!');"
            caption="Item 1"
            iconsrc="images/fisheye_1.png">
      </div>

      <div dojoType="FisheyeListItem" caption="Item 2" iconsrc="images/fisheye_2.png"></div>

      <div dojoType="FisheyeListItem" caption="Item 3" iconsrc="images/fisheye_3.png"></div>

      <div dojoType="FisheyeListItem" iconsrc="images/fisheye_4.png"></div>

      <div dojoType="FisheyeListItem" caption="Really Long Item Label" iconsrc="images/fisheye_3.png"></div>

      <div dojoType="FisheyeListItem" iconsrc="images/fisheye_2.png"></div>

      <div dojoType="FisheyeListItem" iconsrc="images/fisheye_1.png"></div>
</div>

如果我們需要自動添加FisheyeList,該如何編輯呢?比如,當點擊button時,會在Fisheye特校的表徵圖序列前面添加一個表徵圖。那麼,只需要添加一個function。

 var counter = 1;
 function addToFirstList(){
  var fl = dojo.widget.byType("FisheyeList")[0];
  var item = dojo.widget.createWidget("FisheyeListItem", {
    caption: "Dynamically Added "+counter,
    iconSrc: "images/fisheye_"+counter+".png"
   }
  );
  counter++;
  fl.addChild(item);
 }

 

2. InlineEditBox:本地編輯框

      InlineEditBox是可編輯文本的編輯框。使用方法:自訂一句話,當頁面載入時,會顯示自訂的內容,如:Edit me - I will trigger a custom onSave Handler。當點擊這句話時,會出現含有save和cancel的編輯框。:

下面,來看一下上面的實現過程。

方法一:

<h1 id="editable" dojoType="inlineEditBox">Edit me - I will trigger a custom onSave Handler</h1>

 dojo.require("dojo.widget.*");
 dojo.require("dojo.widget.InlineEditBox");
 dojo.require("dojo.event.*");

 function saveHandler(newValue, oldValue) {
       dojo.debug("New Value: " + newValue + " Old Value: " + oldValue);
 }

 function init() {
       var editable = dojo.widget.byId("editable");
       editable.onSave = saveHandler;
 }

 dojo.addOnLoad(init)

方法二:

<p dojoType="inlineEditBox" mode="textarea">Edit me - I will trigger a custom onSave Handler</p>

 

 

3. SortableTable/FilterTable:可排序表格

FilterTable是Dojo0.4版本中新增的widget,它是SortableTable的升級版本。

樣本效果:當點擊表單的標題列的一項時,如id,該列的資料會按照升序、降序交替顯示排序後的效果。其他的標題列功能一致,不再贅述。

引入包:dojo.require("dojo.widget.*");

範例程式碼:

<div class="tableContainer">
     <table dojoType="SortableTable" widgetId="testTable" headClass="fixedHeader" tbodyClass="scrollContent" enableMultipleSelect="true" enableAlternateRows="true" rowAlternateClass="alternateRow" cellpadding="0" cellspacing="0" border="0">
          <thead>
                 <tr>
                      <th field="Id" dataType="Number">Id</th>
                      <th field="Name" dataType="String">Name</th>
                      <th field="DateAdded" dataType="Date" sort="asc">Date Added</th>
                      <th field="DateModified" dataType="Date" format="%b %d, %Y">Date Modified</th>
                      <th dataType="html">Label</th>
                 </tr>
          </thead>
          <tbody>
               表單資料省略……
          </tbody>
     </table>
</div>

屬性說明:

headClass和tbodyClass是CSS樣式;enableMultipleSelect是否允許多選;enableAlternateRows是否使用交替顯示方式;rowAlternateClass交替顯示時使用的CSS樣式

擷取被選中的行號:

  function showSelected(){
        var w=dojo.widget.byId("testTable");
        if(w){
              var s=w.getValue();
              if(s.length>0) alert(s);
              else alert("No rows are selected.");
        }
  }

 

 

4. Clock:時鐘

引入包:dojo.require("dojo.widget.Clock")

情況一:直接載入時鐘
<div id="clock1" dojoType="clock"></div>

情況二:載入時差為-8小時的時鐘

 function init(){
      //動態建立時鐘
      dojo.widget.createWidget(
            "dojo:clock",
            //時差為-8小時
            {timeZoneOffset:-8,label:"-8 HR"},
            dojo.byId("clock2")
      );
 }
 dojo.addOnLoad(init);

<div id="clock2"></div>

 

 

5. Chart:圖表

引入包:dojo.require("dojo.widget.Chart")

chart的使用方法:

<div dojoType="chart">
     <table padding="12 12 20 30" axisAt="0 xmin" rangeX="0 100" rangeY="-100 100">
          <thead>
               <tr>
               <th>X</th>
               <th plotType="line">Series A</th>
               </tr>
          </thead>
          <tbody>
                表格式資料省略……
          </tbody>
     </table>
</div>

 

 

6. Tooltip:工具提示

引入包:dojo.require("dojo.widget.Tooltip")

首先,看一下頁面載入時的。

 

當滑鼠靠近text時,會發生什麼變化呢?如所示:

 

接下來,介紹Tooltip的使用方法。如何?上面的效果?關鍵的屬性是什麼呢?

  <span id="test">text</span>
  <span dojoType="tooltip" connectId="test" caption="how to use Tooltip?"></span>

tooltip小結:經過其他的小測試(這裡省略給出)發現,只要使用connectId綁定id,即使使用href載入html也可以實現同樣的效果。

 

 

7. SlideShow:投影片播放

引入包:dojo.require("dojo.widget.SlideShow")

SlideShow的使用方法:

<img dojoType="SlideShow" imgUrls="images/1.jpg;images/2.jpg" transitionInterval="700" delay="7000" src="images/1.jpg"

    imgWidth="400" imgHeight="300" />

運行效果:imgUrls所指定的圖片(images目錄下的1.jpg和2.jpg)每隔7s切換一次,切換過程的期間是700ms。

 

 

8. GoogleMap:調用Google地圖服務

引入包:dojo.require("dojo.widget.GoogleMap")

GoogleMap的使用方法:

<div dojoType="googlemap" id="mapTest" datasrc="mapData"></div>
說明:Google地圖,資料來自於mapData表格

 

 

9. YahooMap:調用Yahoo地圖服務

引入包:dojo.require("dojo.widget.YahooMap")

YahooMap的使用方法:

<div dojoType="yahoomap" id="mapTest" datasrc="mapData"></div>
說明:Yahoo地圖,資料來自於mapData表格

 

 

General Widget小結:

到目前為止,Dojo的General Widget的內容已經學習完了!希望大家可以舉一返三,熟練的使用它們!

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.