28/01/2014 MCAFEE SECURE 認證的網站

https://www.mcafeesecure.com/RatingVerify?ref=www.HongKongCupid.com

2013年6月24日 星期一

~~*Ubuntu安裝~"~防毒軟體 *~~!!

~~*Ubuntu安裝~"~防毒軟體 *~~!!

***

安裝防毒軟體

$ sudo apt-get install clamav

更新病毒碼

$ sudo freshclam

掃描資料匣,並將感染文件顯示於螢幕

$ clamscan -i -r your_directory

掃描所有文件並且顯示掃描結果, 就使用

$ clamscan -r –bell -i /

將ClamAV常駐

$ sudo apt-get install clamav-daemon
為了可以使ClamAV掃描一些系統文件,
比如您的Email存放的地方,您可以 
添加'clamav'為這些文件或者目錄的所有者。

檢查ClamAV是否運行?

$ ps ax | grep [c]lamd

查詢目前使用的ClamAV版本?

$ clamscan -V

排程掃描   

$ sudo crontab -e
將下列放至最後一行,再儲存離開  
$ 00 00 * * * sudo clamscan -r /

移除  

$ sudo apt-get --purge remove clamav
clamav-base clamav-daemon
clamav-freshclam libclamav2                *~^^~!

**
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

~~"令破舊的~"Windows XP 32位元**.**支援到 64g 的記憶體""~! (已掃描儀確切沒任何病毒可放心下載)~!!

支援到 64g 的記憶體""!!(已掃描儀確 切
沒任何病毒可放心下載)~!~! *

~~XP的記憶體限制是3.25G,
不過最近有大陸人破解了這個限制  !!!~!!!

經過我的測試,確實可以用,
我就自己也做了一個自動安裝補丁~!**

安裝完成後會再C:\boot.ini增加一行 **~~!
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP 64G" /kernel=ntkl64g.exe /hal=hal64g.dll /fastdetect /PAE /NOEXECUTE=optin

開機時會跑出選單讓你選擇你要用原本的還是破解64G的系統
如果測試成功,可以將原本的
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
刪除

如果開機選單的時間太久可以把預設的
timeout=30
改成
timeout=5
選單只會出現5秒

測試成功圖片
**
**
由於我的電腦只裝了4G的ram,但已經由原本的3.25G提升為4G

下載網址      :  *
*
 Download        my 2sharded   pw :1q2q                                                                ""! 

**請勿轉載**
****
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

**陣列元素的新增//移除事件**```!

**陣列元素的新增//移除事件**```!

**掌握observableArray()陣列元素增減,
即時反應在UI的能力。但如果我們希望在--
--陣列增加或移除元素時加上自訂邏輯,
要怎麼做 ?!*
foreach提供了afterAdd及
beforeRemove兩個額外的事件繫結設定,允許
在陣列新增、移除元素時執行特定邏輯。
在此繼續沿用先前的使用者清單呈現範例,
加上兩個效果:
  • 新增資料時,將最新加入的資料標為暗紅字
  • 刪除資料時,加上資料淡出後消失的特效
而在ViewModel裡我們加上兩個函數:       **

**
排版顯示純文字
            //第一次foreach產生時不會觸發,只有事後加入才會 
            self.afterAddEvent = function (elems, idx, data) { 
                //Template中的Text Node與Element Node會分別觸發多次 
                //在本例中會因Text, Element, Text共觸發三次 
                //透過nodeType過濾,只處理Element Node 
                if (elems.nodeType == 1) //Element Node 
                { 
                    $(".new").removeClass("new"); 
                    $(elems).addClass("new"); 
                } 
            }; 
            //注意: 掛載beforeRemove事件後,要自已負責移除被刪除元素 
            self.b4RemoveEvent = function (elems, idx, data) { 
                if (elems.nodeType == 1) { 
                    $(elems) 
                    .css("background-color", "red") 
                    .animate({ opacity: 0.2 }, 500, function () { 
                        $(this).remove(); 
                    }) 
 
                } 
            };                                         **
 
** afterAdd及beforeRemove函數會固定收到三個參數,elems、
index及data,其中elems為範本容器中的各元素,
在本範例中,就是以下黃底紅字部分:
** <<tbody data-bind="foreach: { data: users,
afterAdd: afterAddEvent, beforeRemove: b4RemoveEvent }"> **    <tr>         <td><span data-bind="text: id"></span></td>         <td><span data-bind="text: name"></span></td>         <td><span data-bind="text: score" style='text-align:
right'></span></td>         <td><a href='#' data-bind="click: $root.removeUser">
移除</a></td>     </tr> </tbody>
但此處有個小訣竅,實際運作時afterAdd/beforeRemove會收到不同的elems被  
呼叫三次,原因是除了<tr>之外,<tbody>到<tr>之間的空白、</tr>到</tbody>間  
的空白也各算一個Element,其nodeType為3,代表TEXT_NODE。因此三次傳入  
的elems分別為TEXT_NODE、ELEMENT_NODE、TEXT_NODE,而第二次傳入   
的ELEMENT_NODE是<tr>…</tr>間的內容,才是我們需要處理的對象,
故加入if (elems.nodeType == 1)的判斷式。
最新加入資料的特別標示,在此透過addClass("new")來達成;  
至於移除資料的特效,則先為<tr>加上不透明度(opacity)由100%降到20%的動畫,
然後在動畫完成後,將其自<tbody>中移除。要注意,一旦掛載了beforeRemove, 
就不再自動幫你移除該筆資料在網頁對應的元素,必須自行處理,
但這也提供開發人員絕對的控制權,可自由安排HTML元素要怎麼從網頁上退場。
**
 
 
 
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

**hexdump!!Linux~!!系统的二进制文件**~查看工具~~**

**hexdump!!Linux~!!
系统的二进制文件**
~查看工具 ~~**

**hexdump是Linux下的
一个二进制文件查看 
工具,可以将二进制 
文件转换为ASCII、 
10进制、16进制或8进制进行查看。
首先我们准备一个测试用的文件test,
十六进制如下:
** 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E
0F10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D
1E 1F20 21 22 23 24 25 26 27 28 29 2A 2B 2C
2D 2E 2F
))选项:     *
**

-n length 
只格式化输入文件的前length个字节 

-C
输出十六进制和对应字符
输入  :

hexdump -n 13 -C test
输出  :

00000000 00 01 02 03 04 05 06 07
08 09 0a 0b 0c
|.............|0000000d


-s 从偏移量开始输出
输入:

hexdump -n 13 -C -s 30 test
输出:

0000001e 1e 1f 20 21 22 23 24 25
26 27 28 29 2a |.. !"#$%&'()*|0000002b


hexdump高级用法:
-e 指定格式字符串,格式字符串包含在
一对单引号中,格式字符串形如:
'a/b "format1" "format2"'   

每个格式字符串由三部分组成,
每个由空格分隔,
第一个形如a/b,b表示对每b个输入 
字节应用format1格式,a表示对每a个输入
字节应用format2格式,一般a>b,
且b只能为1,2,4,另外a可以省略,
省略则a=1。
format1和format2中可以使用 
类似printf的格式字符串,
如:%02d:两位十进制
%03x:三位十六进制
%02o:两位八进制
%c:单个字符

还有一些特殊的用法:
%_ad:标记下一个输出字节的序号,
用十进制表示%_ax:标记下一个输出字节
的序号,用十六进制表示  ````
%_ao:标记下一个输出字节的序号,
用八进制表示       ``````
%_p:对不能以常规字符显示的用.
代替同一行如果要显示多个格式字符串,
则可以跟多个-e选项      **`````

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

*MAC~*Maverecks DP1 */Operating System/OS X Mavericks/OS X Mavericks 10.9 DP1.dmg*~~下載資源匯總**~!(分享时间:2013-6-11 13:24)~!


*MAC~*Maverecks DP1 */Operating System/OS X Mavericks/
OS X Mavericks 10.9 DP1.dmg*~~下載資源匯總**~!

**迅雷快傳**
*~分享:迅雷快傳
目前離線進度100% 歡迎拖取***


**百度網盤**
*~分享:百度網盤   *

**論壇FTP  **/Operating System/OS X Mavericks/OS X Mavericks 10.9 DP1.dmg**

****4.66G **
*分享时间:2013-6-11 13:24*

!!**~這個才叫快 ^^~http://www.cocoachina.com/bbs/read.php?tid=143813   ~!!**

*OS X Mavericks 10.9 下载地址 10M/s  *
*
下载地址:192.155.80.234/OS_X_Mavericks_10.9_DP1.dmg
SLXBQP?^SZ
           MD5:   
e9233aa18228eaddd0fda7659a05bde3 OS_X_Mavericks_10.9_DP1.dmg
uU L2fHCG]
   速度可以跑满你的带宽        ~````
****
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

2013年6月23日 星期日

**~考慮舊版相容性的**APP~設計------**!!^

**~考慮舊版*.*相容性的***APP~設計   -------  **!!^
***

**iOS每年推陳出新,不斷地冒出各式各樣**
新鮮有趣的新類別,新method,讓我們可以--
--天馬行空地發揮想像力,設計更多令人耳目--
--**一新的App。但是,世界並沒有想像中美好,
不可能每個人的iPhone都升級到最新的iOS。
因此,我們還是要考慮到這些舊版iOS--
--使用者的相容性**~!!^

**以最新推出的iOS 6為例,MKMapItem是個**
**全新的類別,提供我們更方便的地圖應用
可能。但是舊版的iOS就不支援了,因此我們在--
--設計App時,最好能夠聰明地判斷,當使用者--
--機器為iOS 6時才使用MKMapItem, 當機器為--
--舊版的iOS時則採用另外的配套方案 **&^

**判斷的方法很簡單,只要以下2行程式碼   :
**

**
Class itemClass = [MKMapItem class];
 if([itemClass respondsToSelector:@selector (openMapsWithItems:launchOptions:)])
 {
     
 }


說明:
不管使用者的機器是否為iOS 6,

都可以建立MKMapItem類別物件。
但只有iOS 6機器所建立的,才真正具有--
--執行MKMapItem所定義method的能力。
因此只有在iOS 6,以上的if敘述才會成立 **~!! ^^

****
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

*~電腦突然就~~不能開機了 ?!!**^

*


*~
電腦突然就~~不能開機了 ?!!**^

**原本前一天電腦還可以正常開機,為什麼 ?!!
今天忽然就不能開機了?~~
  一般使用者所謂的「不能開機」很籠統,
只要沒有進入到Windows裡,他們都稱 
「不能開機」,其實不能開機有很多種情況,
每種解決的方法都不一樣,一般所謂的 
「不能開機」有以下幾種情形:
  1. 「按下電源開關後,沒有反應,
也就是沒有電源」。
  2. 「一打開電腦沒有螢幕畫面,
但主機的燈有亮」。
  3. 「畫面停在黑黑、一堆英文字的
地方(BIOS POST階段)」。
  4. 「進入到Windows後,也就是已經--
--看到Windows XP的商標後,又跳開重開機」 。

  而這一篇文章要探討的是屬第三種:
畫面停在黑黑、一堆英文字的地方
(BIOS POST階段)」及第四種  ---
---「進入到Windows後,也就是已經--
--看到Windows XP的商標後,又跳開重開機
的這種不能開機  **~!

畫面停在黑黑、一堆英文字的地方
(BIOS POST階段)
  會停在BIOS POST階段,多半是硬體--
--的狀態有改變到,而最常見的狀況都是出在
「硬碟」,狀況有下列兩種:
  1. 開機裝置的順位(硬碟)沒有指定好。
一般來說,硬碟的開機順位設定不會無故跑掉,

一定有原因,大部份都是電池沒電的關係,
所以主機板沒有辦法記憶你所設定好的資料,
主機板電池的位置及長相你可以參考
msn即時通無法登入,錯誤碼80048820」;
還有一種比較嚴重的情況就是  -----
----「硬碟已經壞掉」了,所以主機板在---
--開機時沒有抓到它,才造成無法開機的情況,
這種情況的解決方法當然是換硬碟就好了  **

  2. 開機裝置有指定好,但是開機區--
--資料損壞。
   就算你開機裝置的設定正確無誤,
結果還是不能開機,就很有可能是開機區--
--資料損毀,通常開機區損毀在開機時都會-
-有「NTLDR is missing」的訊息,開機區的-
-資料也不太可能會無緣無故的就損毀,
多半是因為不正常關機木馬病毒程式或是--
--硬碟壞軌的關係,除了壞軌的情況你有--
--可能需要去更換硬碟之外,若是因為其它--
--因素而造成開機區資料損毀,你可以嘗試 
稍後下一段「修復主控台」來做修復 **~!*

進入到Windows後,也就是已經--
--看到Windows XP的商標後,又跳開重開機
  若是進入Windows後又跳掉重開機的--
--情況,最常見的是「記憶體」、 
「CPU散熱的問題」、「硬碟壞軌」及 
「開機區資料損壞」的問題,同樣的若是 
「開機區資料損壞」的情況請參考以下的 
「修復主控台」的修復教學 !!~

使用復原主控台來修復WindowsXP安裝

  我曾經在「電腦中毒了要怎麼辦?
處理流程教學總整理」的這篇文章上有提到
「復原主控台」這個東西,那時由於篇幅的
關係所以沒有辦法很詳細的介紹進入的方法,
接下來就讓我示範一下如何進入「復原主控台」。
  要進入復原主控台之前,你需要準備--
--幾個東西,「WindowsXP原始光碟」、
最高系統管理者Administrator的密碼」,
當你準備好打開主機電源,立即將
「WindowsXP原始光碟」放進光碟機中吧 !
  當你將「WindowsXP原始光碟」
放進光碟機,且有設定「光碟機」開機的話,
你應該會看到以下這個訊息 
「Press any key to boot from CD..」,
意思就是要你隨便按鍵盤上任一個按鍵,
電腦即會從光碟片上開機:             **







**等約一至兩分鐘,會來到Windows XP 的
安裝程式畫面,這時有三個選項讓你選擇
   1. 如果您要立即安裝Windows XP,
請按ENTER。
   2. 如果您要使用復原主控台來修復 
 Windows XP安裝,請按R。
   3. 如果您不想安裝 Windows XP,
請按F3。
  這時當然是請你按下「R」來使用
復原主控台   **
**















**按下「R」之後會來到以下這個畫面,這時候請不要隨便亂按 
鍵盤上的Enter鍵,請你先等約5秒鐘,如果你有注意到的話,
最下面有一行訊息是這麼寫著「如果您要選取非預設的鍵盤格式,
請現在按ENTER」,由於我們都是要選擇預設的鍵盤格式,
所以請你先什麼都不要按,直到出現下一段文字訊息  **




















**緊接下來,會要你選擇要登入哪個Windows,如果你的電腦只*
*安裝了一個Windows,當然是只有「1:C:\WINDOWS」一個選擇,*
*所以就請你按「1」,並且按下ENTER,接下來馬上就會要你*
*輸入Administrator的密碼,請輸入你的Administrator的密碼,*
**這個Administrator是當初在安裝Windows時所設定的,
所以如果你的Windows不是你自己安裝的,很有可能這個密碼是空的**
*所以可以試一下直接按ENTER,看看是否可以通過密碼的驗證***
(註:當你這個Administrator的密碼是空的時候你要注意這個帳號**
**最好要設定一個適當的密碼,才不容易被駭客入侵,
或是被木馬程式所利用)**










**進入復原主控台後,在每行可以輸入指令之前會有一個**
**命令提示字元,就好像在DOS一樣,你可以鍵入「HELP」來看一下*
*有哪些指令可以使用,之後可以按「HELP 指令」來了解到這個指令**
*要如何的使用,在這裡我們要使用到的指令有三個,「fix boot」、
fixmbr」及「chkdsk」 ,以下是這三個的使用說明:                  **

**fixboot 在系統磁碟分割上寫入新的開機磁碟分割 :               **
**

**fixmbr 修復開機磁碟分割上的主開機記錄:                                 **
**

**chkdsk 檢查磁碟並顯示狀態報告 :                                                    **
**

**這時候你可以鍵入「fixboot」,來將新的開機寫入磁碟分割,
當你一執行指令後,即會詢問你要寫入的磁碟分割是C:嗎? 
請按鍵入「y」,即代表yes   **
**


**再來我們要來重新寫入一個新的主開機記錄(MBR),
請你執行「fixmbr」這個指令,也一樣,它會停在一個詢問訊息,
「您確定要寫入一個新的MBR嗎?」,請你按「y」**
**


**最後一個我們要用的指令是「chkdsk」, 
這個指令要代一些參數一起使用,請輸入「chkdsk c: /r」**
*~注意:每一個參數都要用「空白」隔開,即會開始檢查磁碟區C,
並且並到有問題的區域時會立即做修復的動作**
**


**最後要離開「復原主控台」時,請你鍵入「exit」 **
*~!電腦即會立即的重新開機**
**執行這三個指令,在非真的壞軌的情況下,
可以挽救一些磁區損毀的問題,不保證一定可以,
但是值得一試的好方法  **~!*

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

**網頁介面開發**拖拉元素~調整排序**~!

**~*網頁介面開發**
拖拉元素~調整排序**~!

**網頁介面開發技巧是--拖拉元素調整排序**
**網頁上會顯示五個<span>方塊,
假設其排序有特定意義(例如: 出場順序,
決定先用皮卡丘之後再派妙蛙種子之類的),
使用者可用滑鼠或手指直接拖曳方塊--
--改變其排列順序,當某個方塊被拖到另一個方塊上,就對調兩個方塊的位置,
藉此自由調整所有方塊的排列順序**
****
****

**有興趣了解程式開發細節的*來看看程式裡用到的技巧:       *
**
  1. 產生五個<span>方塊的部分,採用的--
  2. -- MVVM的做法。宣告了一個viewModel函數,
  3. 透過ko.observableArray()保存資料物件陣列,
  4. <div id="dvList" data-bind="foreach: items">
  5. 將資料物件陣列的每個元素對應成一個<span>
  6. ,用<span data-bind="text: name">可將屬性
  7. 當成<span>的內容。 viewModel函數中,
  8. var self = this;的做法可視為knockout.js中
  9. 的Best Practice  **
  10. 為突顯knockout.js可即時反應資料變化的特性,
  11. 我刻意每隔0.5秒塞入一筆資料,讓我們可--
  12. --觀察到Player0到Player4逐一出現的過程。
  13. 而由於setTimeout塞入資料為非同步作業,
  14. 為了確保在全部完成後才執行下一步驟,
  15. 再次使用$.Deferred()的技巧處理同步化  ~!**
*元素拖拉部分採用的是Kendo UI Web**的Drag & 
 Drop功能。實測發現,用Kendo UI所開發的拖拉 -
-功能,不管在PC使用滑鼠操作或在行動裝置進行
手指觸控操作都很順暢,不需針對不同裝置特意
改寫,十分便捷。(但有些小眉角,例如: 有多個--
--放置目標時如何取得當時的放置目標,需要點--
--小技巧,細節可參見程式註解) ***

**至於方塊對調位置的動畫效果,則是--
--將<span>元素先轉成position: absolute,
再靠.animate({ left: 新座標 })搞定,對 jQuery來說-
-不過小菜一碟。
移動過程為了讓使用者有方塊是浮起來在空中-
-飛移的錯覺,
借用了CSS3的transform:
scale(1.1,1.1)讓<span>放大10%,此時早先介紹的HTML5/CSS3瀏覽器
支援速查工具派上用場,
查詢結果顯示要IE10, FF16才支援不加-ms-,
–moz-的寫法,Safari/Chrome則仍需要-webkit-,
所以乖乖加上-ms-, –moz-, –webkit-寫成三筆   **

**<span>對調順序的部分,用jQuery的.after()就
可以解決,但為了定址方便,我偷偷加放了 
一個空白<span class='item-pos'>,
程式碼瞬間簡化許多**

**完整程式碼如下,已內含不少註解,
但坦白說,因涉及不少進階技巧,
程式碼並不好懂,希望註解夠清楚 ~!!
**
**
排版顯示純文字
<!DOCTYPE html>

 
<html> 
<head> 
    <title>Drag to Swap Demo</title> 
    <script src="../Scripts/jquery-1.7.2.min.js"></script> 
    <script src="../Scripts/kendo/kendo.web.js"></script> 
    <script src="../Scripts/knockout-2.1.0.js"></script> 
    <link href="../Content/kendo/kendo.common.min.css" 
rel="stylesheet" type="text/css" /> 
    <link href="../Content/kendo/kendo.metro.min.css" 
rel="stylesheet" type="text/css" /> 
    <script> 
       //定義ViewModel類別 
        function viewModel() { 
          //將this另指派給self變數,之後以其代表View Model本體,
            //避免與函數中的this所指的對象混淆  
            var self = this; 
          //定義一個集合存放資料 
            self.items = ko.observableArray(); 
          //定義加入item的方法, 在items中加入具有name及score屬性的物件 
            self.addItem = function(name, score) { 
                self.items.push({ name: name, score: score }); 
          };  
        } 
 
        $(function () { 
           //建立ViewModel 
           var vm = new viewModel(); 
           //每隔0.5秒加一筆以觀察knockoutJs讓UI即時反應資料變化的效果 
            //使用jQuery.Deferred處理實現完成時機的同步 
            function job(i) { 
                var df = $.Deferred(); 
                setTimeout(function () { 
                    vm.addItem("Player" + i, i * 100); 
                    df.resolve(); 
                }, i * 500); 
                return df.promise(); 
            } 
            //建立延遲0-4秒執行的加入item作業 
            var jobs = []; 
            for (var i = 0; i < 5; i++) { 
                jobs.push(job(i)); 
            } 
            //等待所有job執行完畢,掛上Kendo UI拖拉功能 
            $.when.apply(null, jobs).then(function () { 
                var $items = $("span.item"); 
                //加上拖曳特性,hint事件回傳拖曳過程顯示的元素 
    $items.kendoDraggable({ 
                    hint: function (e) { 
                        return e.clone().addClass("drag-item"); 
                    } 
                }) 
                .each(function () { 
                    //由於kendoDropTarget事件中,
被放置對象this非亦無事件屬性可存取 
                       //故使用Closure方式將元素存入$item供drop事件存取 
                    var $item = $(this);
                    //加上放置目標特性才能接成為拖曳的目標 
                    $item.kendoDropTarget({
                        //拖曳到目標元素上方及離開
時改變CSS,提供使用者可以放置的提示
                        dragenter: function (e)
 { $item.addClass("drop-item"); },
                        dragleave: function (e)
 { $item.removeClass("drop-item"); },
                        //在目標元素上方鬆開滑鼠或 
手指離開觸控螢幕時觸發drop事件 
                           drop: function (e) { 
                            //透過以下方式取得拖曳元素及放置元素 
                                 var $drag = e.draggable.element; 
                            var $drop = $item; 
                            $drop.removeClass("drop-item"); 
                            //拖曳對象與放置目標相同時不處理 
                                 if ($drag.text() == $drop.text()) return; 
                            //顯示位置交換動畫 
                                //先將全部元素轉為絕對座標 
                            $items.each(function () { 
                                //先記下座標值,以.data()保存 
                                var $elem = $(this); 
                                $elem.data("pos", $elem.position()); 
                            }) 
                            .each(function () { 
                                //維持座標位置,但換成絕對座標 
                                      var $elem = $(this); 
                                var pos = $elem.data("pos"); 
                                $(this).css({ 
                                    position: "absolute", 
                                    top: pos.top + "px", 
                                    left: pos.left + "px" 
                                }); 
                            }); 
                            //$drag與$drop交換位置,使用animate 
                            var dragLeft = $drag.data("pos").left + "px"; 
                            var dropLeft = $drop.data("pos").left + "px"; 
                            var $moving = $drag.add($drop); 
                            $moving.addClass("move-item"); 
                            $drag.animate({ left: dropLeft }, 1000); 
                            $drop.animate({ left:
 dragLeft }, 1000, function () { 
                                $moving.removeClass("move-item"); 
                                //交換位置 
                                var $dragPos = $drag.prev(".item-pos"); 
                                $drop.prev(".item-pos").after($drag);  
                                $dragPos.after($drop); 
                                //改回相對座標 
                                $items.css
({ position: "", left: "", top: "" }); 
                            }); 
                        } 
                    }); 
                }); 
            }); 
            //將ViewModel與UI結合 
            ko.applyBindings(vm); 
        }); 
    </script> 
    <style> 
        html,body { font-size: 9pt; } 
        .item 
        { 
            font-family: Segoe UI; display: inline-block; 
            border: 1px solid gray; 
            margin-left: 5px; padding: 5px; 
            width: 80px; height: 25px; 
            background-color: #0099FF; color: white; 
            text-align: center; 
        } 
        .drag-item 
        { 
            opacity: 0.5; 
            background-color: #FF3300; 
        } 
        .move-item  
        { 
            z-index: 9; 
            -ms-transform: scale(1.1,1.1); /* IE 9 */ 
            -webkit-transform: scale(1.1,1.1); /* Safari and Chrome */ 
            -moz-transform: scale(1.1,1.1); /* Firefox */ 
        } 
        #dvList { margin-top: 20px; } 
        .drop-item 
        { 
            background-color: Purple; 
        } 
    </style> 
</head> 
<body> 
<div id="dvList" data-bind="foreach: items"> 
    <span class='item-pos'></span> 
    <span class='item'> 
        <span class='item-name' data-bind="text: name"></span> 
        (<span class='item-score' data-bind="text: score"></span>) 
    </span> 
</div> 
</body> 
</html> 

**
****
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&