用自定義的拖放實現乙個漢諾塔遊戲

2021-09-19 10:58:26 字數 709 閱讀 4060

和原題一樣,做這遊戲的難點就是拖放效果的實現,雖然用h5的原生拖放很容易實現,但是瀏覽器的相容卻不太好(ie10以下沒有實現draggable屬性,只有等一些特殊元素是可以拖動的)。於是當時還很*****的我用十分猥瑣的滑鼠事件套滑鼠事件,艱難地實現了乙個還能跑的程式,但是低水平的**實在是太難看了(以至於我這次想重新實現一遍都得看好久)。

就沒有優雅點的寫法嗎?當然有,《js高階程式設計》裡就提供了一種高階的寫法,也是利用滑鼠事件,但在**封裝和介面設計上卻比我高到不知道哪去了。具體實現可參考原書或這個,整個拖放效果被封裝在乙個單例物件裡,只有enabledisable兩個介面方法決定拖放的開啟與否。介面很簡單,但如果我們要在基本的拖動上再實現更加複雜的效果,就得依靠事件了。雖然我們沒有辦法對元素新增自定義事件,但是我們可以曲線救國,將自定義的拖動事件綁在單例物件上,然後利用滑鼠事件間接觸發相應的拖動事件即可。利用這段**,我們就可以模仿出類似h5的原生拖動了。

而有了這一利器,我當然就想把原來寫的亂七八糟的**再重構一遍啦。感覺重構的過程剛開始就和吃剩飯一樣,是比較痛苦的,但當你一步步用更優雅和高階的**輕鬆實現原來你花半天才想出來的解決方案時,不僅會讓你感嘆你當初的天真,也會讓你感嘆原來寫**的體驗可以如此美好、原來難題與痛苦不過是小case罷了。

ps.重構好的**我放github上了,實現的效果可見其pages,一起玩玩唄,覺得好玩記得給star★哈~

用java寫了乙個漢諾塔

package com.brzhang 漢諾塔 開始盤子全部都放在第一根柱子上 目的 將第一根柱子上的盤子全部移動到第三根柱子上,規則是不能編號較大的盤子放在編號交小的盤子上面。public class hanota else 移動盤子,從from移動到to借助assite param from p...

Python實現乙個使用者自定義的猜數字遊戲

mix 100 min 0 realvalue int input 輸入乙個要別人猜測的數字 將str型別轉換為int型別進行比較 for i in range 1,100 number int input 輸入您要猜測的數字 if number 100 print 超出範圍100 continue...

實現乙個自定義元件

如果要建立乙個自定義元件,你需要重寫uicomponent類的某些方法,最少需要重寫如下方法 建構函式,createchildren commitproperties measure layoutchrome updatedisplaylist 基礎語句結構如下 package mycomponen...