1. 程式人生 > >前端拖拽外掛gridster.js介紹與使用示例

前端拖拽外掛gridster.js介紹與使用示例

gridster.js是一款基於jquery的前端拖拽外掛,效果相當的不錯,大家可以先看看Demo(http://gridster.net/#intro)(藍色部分的白塊就是了,可以隨便拖動,娛樂性很強)。

一、更多示例

    gridster.js允許使用者做一些自定義配置(第二節會講到),通過配置可能實現不同的效果和功能,並且可以做一些限制。以下的示例可能在知道如何 使用後才能更好理解,所以放在前面只做一個索引,有的功能不理解也沒關係,gridster只是讓大家知道它可以實現大概以下功能。
(1)動態新增模組(http://gridster.net/demos/adding-widgets-dynamically.html

):使用add_widget方法,通過陣列建立一個gridster例項,產生的模組自動排列,無需指定相對位置。
(2)自定義模組內滑鼠的拖動區域(http://gridster.net/demos/custom-drag-handle ):滑鼠點住模組內指定的元素才可以開始拖動,這樣做以免影響模組內其他滑鼠動作,比如超連結。
(3)放大懸停模組(http://gridster.net/demos/expandable-widgets.html):通過resize_widget方法改變滑鼠懸停模組的大小
(4)通過JSON序列建立gridster例項(http://gridster.net/demos/grid-from- serialize.html
):通過JSON序列生成一個gridster例項(有了這個方法我們就可以方便的從資料庫讀取使用者的模組位置定義等等)
(5)同一頁面放多個拖拽例項(http://gridster.net/demos/multiple-grids.html ):通過配置引數namespace在同一個頁面配置多個gridster例項
(6)改變模組大小(http://gridster.net/demos/resize.html ):可以通過拖動改變模組的大小
(7)改變模組大小時新增不同限制(http://gridster.net/demos/resize-limits.html ):你可以使用 resize.max_size和resize.min_size配置,以及在模組html當中新增data屬性data-max-sizex、 data-max-sizey、data-min-sizex、data-min-sizey來限制拖動時模組大小的最大最小值。
(8)輸出當前所有模組的位置排布(序列化)(
http://gridster.net/demos/serialize.html
):通過serialize方法獲取模組的位置資訊,可以當作JSON物件使用(這樣就可以方便的儲存資料)
(9)拖動的回撥函式(http://gridster.net/demos/using-drag-callbacks.html ):在開始拖動、拖動結束或位置已改變都可以通過回撥函式呼叫相關的動作,實現一些需要的方法。
(10)改變模組大小後的回撥函式(http://gridster.net/demos/using-resize-callbacks.html ):同上,改變模組大小時的回撥函式,分為開始、改變、結束三個事件。
(11)動態改變gridster例項的寬度(http://gridster.net/demos/dynamic-grid-width.html ):gridster的列數可以自行定義,這樣你可以把模組使勁的~~~往右邊拖,直到你設定的最大值。

二、如何使用?

使用gridster.js要求引用三個必須的檔案:
1.jquery.js(jQuery檔案,gridster官方不提供下載,不多說了-> http://www.jquery.com )
2.jquery.gridster.js(gridster的主要指令碼)
3.jquery.gridster.css(gridster的樣式檔案)

後面gridster.js官網提供了下載(http://gridster.net/#download ),另外你也可以直接下載最後面的官方示例包 gridster.js.zip(https://github.com/ducksboard/gridster.js/zipball /master,但是請注意,官方示例包裡面沒有jquery,你需要自己放進去,不知道他們故意的還是bug)

下載完了我們就開始用了:
首先html檔案:

HTML程式碼 

1.  <!doctype html>

2.  <html>

3.  <head>

4.          <meta charset="utf-8">

5.          <title>gridster例項</title>

6.          <!-- 呼叫jquery,注意你放置的目錄不要搞錯了哦! -->

7.          <script src="./js/jquery-1.11.1.min.js" type="text/javascript"></script>

8.          <!-- 呼叫gridster.js和css,注意你放置的目錄不要搞錯了哦! -->

9.          <script src="./js/jquery.gridster.js" type="text/javascript" charset="utf-8"></script>

10.         <link rel="stylesheet" type="text/css" href="./js/jquery.gridster.css">

11.         <script>

12.                 //通過javascript指令碼來配置拖動例項,隨後我們會講每個配置引數的意義

13.                

14.                 //首先定義一個變數gridster,為了以後呼叫gridster的方法

15.                 var gridster;

16.

17.                 $(function(){

18.

19.                                 gridster = $(".gridster ul").gridster({        //通過jquery選擇DOM實現gridster

20.                                 widget_base_dimensions: [100, 120],        //模組的寬高 [寬,高]

21.                                 widget_margins: [5, 5],        //模組的間距 [上下,左右]

22.                                 draggable: {

23.                                         handle: 'header'        //模組內定義拖動的元素<header>,這裡也支援jquery選擇器,如"span.drag_handle"

24.                                 }

25.                         }).data('gridster');

26.

27.                 });

28.

29.         </script>

30.         <!-- 當然,除了呼叫gridster.js和css,你也要為你的html寫一些自己的style -->

31.         <style>

32.                 .gridster ul{margin:0;}

33.                 .gridster ul li{list-style-type:none;border:1px solid #e0e0e0;}

34.                 .gridster ul li header{background: none repeat scroll 0% 0% #999;display: block;font-size: 20px;line-height: normal;padding: 4px 0px 6px;margin-bottom: 20px;cursor: move;text-align:center;}

35.         </style>

36. </head>

37. <body>

38.         <div class="gridster">

39.                 <ul>

40.                         <li data-row="1" data-col="1" data-sizex="2" data-sizey="2">

41.                                 <!-- 這裡寫了一個header,對應配置裡面的handle,滑鼠落到header上面可以拖,而不是整個塊 -->

42.                                 <header>|||</header>

43.                                 0

44.                         </li>

45.                         <li data-row="1" data-col="3" data-sizex="1" data-sizey="2">

46.                                 <header>|||</header>

47.                                 1

48.                         </li>

49.                         <li data-row="1" data-col="4" data-sizex="1" data-sizey="1">

50.                                 <header>|||</header>

51.                                 2

52.                         </li>

53.                         <li data-row="3" data-col="2" data-sizex="3" data-sizey="1">

54.                                 <header>|||</header>

55.                                 3

56.                         </li>

57.

58.                         <li data-row="4" data-col="1" data-sizex="1" data-sizey="1">

59.                                 <header>|||</header>

60.                                 4

61.                         </li>

62.                         <li data-row="3" data-col="1" data-sizex="1" data-sizey="1">

63.                                 <header>|||</header>

64.                                 5

65.                         </li>

66.                         <li data-row="4" data-col="2" data-sizex="1" data-sizey="1">

67.                                 <header>|||</header>

68.                                 6

69.                         </li>

70.                         <li data-row="5" data-col="2" data-sizex="1" data-sizey="1">

71.                                 <header>|||</header>

72.                                 7

73.                         </li>

74.                         <li data-row="4" data-col="4" data-sizex="1" data-sizey="1">

75.                                 <header>|||</header>

76.                                 8

77.                         </li>

78.

79.                         <li data-row="1" data-col="5" data-sizex="1" data-sizey="3">

80.                                 <header>|||</header>

81.                                 9

82.                         </li>

83.                 </ul>

84.         </div>

85. </body>

86. </html>

OK,儲存。大功告成!(注意:引用的三個檔案不能少哦~從第17“$(function(){”開始,即是gridster的配置指令碼,例如“widget_base_dimensions: [100, 120]”“widget_margins: [5, 5]”這些都是配置引數。現在你可以開啟來看看這個拖動效果了,Oh,買尬的!也會你會發現很不流暢,這個或許是girdster的小bug或者說不完美的地方,如何改進,明天再講!