Flash Actionscript 2 List Component и выбор нескольких элементов без необходимости удерживать клавишу CTRL при нажатии - PullRequest
2 голосов
/ 11 августа 2011

Мне интересно, есть ли способ, позволяющий пользователям выбирать несколько элементов из моего компонента AS2 List без необходимости удерживать нажатой клавишу CTRL во время нажатия.Таким образом, они смогут выбирать / отменять выбор отдельных элементов одним щелчком мыши - эффективно включать / выключать элемент точно так же, как вы бы удерживали клавишу CTRL при выборе.

Кто-нибудь может придумать какие-либо рекомендации по юзабилити для такого рода взаимодействия?Это похоже на представление списка флажков (но я думаю, что это лучше).Существуют ли какие-либо примеры взаимодействия с simialr.

Позволяет ли это сделать компонент списка AS2?Например, я хотел бы сказать list._ctrlAlwaysOn = true; -)

спасибо

Ответы [ 2 ]

1 голос
/ 04 сентября 2011

Демонстрационная версия моего решения: 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-списков, например, подсветка поля вместо того, чтобы ставить галочку напротив него ... черт, может, даже в AS2 вы Вы также можете выделить поле, которое вы выбрали ....

0 голосов
/ 31 августа 2011

Лично я бы сказал, что вы должны использовать флажки, так как они делают именно то, что вы хотите, и никто не ожидает, что список будет работать таким образом.

В любом случае это должно быть возможно при обработке списка selectedIndices свойство вручную.Это необходимо, потому что если щелкнуть список (без удержания ctrl ), выбранные индексы будут потеряны.Самостоятельное отслеживание этих индексов может предотвратить это.

// stores selected indices
var selected:Array = new Array();

// handler when item is selected
var listHandler:Object = new Object();
listHandler.change = function(evt:Object) {
    // all selected elements are automatically cleared at this point
    var index = evt.target.selectedIndex; // clicked item
    for (i = 0; i < selected.length; i++) {
        if (selected[i] == index) {
            // index was already selected, remove it
            selected.splice(i, 1);
            evt.target.selectedIndices = selected; // reassign our own selection
            return;
        }
    } 
    // index wasn't selected
    selected.push(index);
    evt.target.selectedIndices = selected; // reassign our own selection
};

list.addEventListener("change", listHandler);

Я не могу проверить это, так как у меня нет доступа к этой древней технологии (к компилятору да, но не к mxкомпоненты).Так что, возможно, потребуется немного исправить;Если список не обновляется, вам нужно запустить событие изменения вручную ... тогда вам, вероятно, нужно добавить что-то, чтобы предотвратить бесконечную рекурсию события изменения.И это может показаться странным, если пользователь делает несколько выборов с помощью своих ctrl или shift .Но я не получу от вас удовольствия от выяснения этого.Этот код является основной идеей, кроме того, что вам нужно будет создать свой собственный компонент списка.Для HTML-эквивалента: используйте jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...