2011-08-11 21 views
2

我想知道是否有一種方法,允許用戶從我的AS2列表組件中選擇多個項目,而不必按住CTRL,而單擊。因此,他們可以通過一次點擊來選擇/取消選擇單個項目 - 有效地切換項目的開/關方式與您在選擇時按住CTRL的方式完全相同。Flash ActionScript 2列表組件和選擇多個項目,而不必按住CTRL,而點擊

任何人都可以想到這種交互的任何可用性指導?這有點像提供複選框列表(但我認爲更好)。 simialr互動中是否有任何示例。

AS2列表組件是否允許這樣做?例如,我想說list._ctrlAlwaysOn =真;-)

感謝

+0

也有一種方法來做到這一點與HTML列表?我有2個地方,用戶將從列表中選擇項目 - 在Flash和HTML頁面上。我希望能夠在這兩個地方複製這個功能。 – undefined

回答

1

我的解決方案的現場演示:http://codebundles.com/listDemo.swf

你可以添加一個「檢查」選項盈用戶選擇,如果用戶再次點擊它刪除檢查,這樣一來,用戶可以取消選擇通過點擊該對象第二次..我曾經索引和列表上的數據,但這裏是一個快速的例子,運行相當順利!它看起來非常好!

list.addItemAt(0, "​item 1", 0) 
list.addItemAt(1, "item 2", 1) 
list.addItemAt(2, "item 3", 2) 
list.addItemAt(3, "item 4", 3) 
list.addItemAt(4, "item 5", 4) 
list.addItemAt(5, "item 6", 5) 
_root.onMouseUp = function() { 
    selectedObject = (list.getSelectedItem().data) 
    tempString = (list.getSelectedItem().label) 
    withcheckString = "✓​" + (list.getSelectedItem().label) 
    var stringArray:Array=tempString.split("✓​"); 
    withoutcheckString = stringArray.join(""); 
    trace(tempString.indexOf("✓​")) 
    if (tempString.indexOf("✓​") == -1) { 
     list.replaceItemAt(selectedObject, withcheckString, selectedObject); 
    } else if (tempString.indexOf("✓​") == 0) { 
     list.replaceItemAt(selectedObject, withoutcheckString, selectedObject); 
    } 
} 

*一個錯誤,我可以看到未來的是,如果你有一個像我在現場演示滾動條...點擊移動,這將導致被稱爲「mouseUp事件」事件和刪除/添加一個檢查你最後選擇的列表項目..所以你可能想要檢測用戶的_ymouse & _xmouse位置實際上是在運行我的「✓」替換代碼之前列表中。不應該很難;)
*也,ctrl +點擊可能不工作了,但你仍然可以添加代碼來修復,以及...

這同樣的代碼將適用於HTML ..但我敢肯定,有更好的JavaScript的東西,你可以做的HTML升ists像突出顯示的領域,而不是檢查infront它..甚至在AS2甚至可以突出你選擇的領域......

0

個人而言,我會說,你應該使用複選框,因爲他們做你想要什麼,沒有人希望清單,這種方式工作。

無論如何,應該可以通過手動處理列表的selectedIndices屬性。這是必要的,因爲如果列表被點擊(沒有保留ctrl),至今選擇的索引都會丟失。自行跟蹤這些指數可以防止這種情況發生。我不能測試它,因爲我沒有訪問這個古老的技術(對編譯器是,而不是對mx組件)。我不能測試它,因爲我沒有訪問這個古老的技術(對編譯器是的,但不是對mx組件)。所以它可能需要一點點修復;如果列表未更新,則需要手動觸發更改事件...然後您可能需要添加一些內容以防止發生無限變化事件遞歸。如果用戶用他的ctrl轉變做出多個選擇,它可能會表現得很有趣。但是我不會從中找出所有的樂趣。這個代碼是基本的想法,除了你需要創建你自己的列表組件。對於HTML等價物:使用jQuery。

相關問題