I choose , I like…………
要走好明天的路,必须记住昨天走过的路,思索今天正在走着的路。

学习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的内容已经学习完了!希望大家可以举一返三,熟练的使用它们!

 

posted on 2008-09-19 11:05  飞翔的Angela  阅读(2904)  评论(3编辑  收藏  举报