JavaScript, отображающий сенсорные события на события от нажатия мыши

Я использовал следующий способ вычислить анаграммы несколько месяцев назад:

  • Вычисляют "код" для каждого слова в Вашем словаре: Создайте таблицу поиска из букв в алфавите к простым числам, например, запускающийся с [2] и заканчивающийся ['z', 101]. Как шаг предварительной обработки вычисляют код для каждого слова в Вашем словаре путем поиска простого числа для каждой буквы, из которой это состоит в таблице поиска, и умножьте их вместе. Поскольку более поздний поиск создает мультикарту кодов к словам.

  • Вычисляют код Вашего входного слова, как обрисовано в общих чертах выше.

  • Вычисляют codeInDictionary % inputCode для каждого кода в мультикарте. Если результат 0, Вы нашли анаграмму, и Вы можете поиск соответствующее слово. Это также работает на 2-или анаграммы больше-слова также.

Hope, которая была услужлива.

54
задан Questioner 4 October 2009 в 14:43
поделиться

1 ответ

Я уверен, что это именно то, что вам нужно:

function touchHandler(event)
{
    var touches = event.changedTouches,
        first = touches[0],
        type = "";
    switch(event.type)
    {
        case "touchstart": type = "mousedown"; break;
        case "touchmove":  type = "mousemove"; break;        
        case "touchend":   type = "mouseup";   break;
        default:           return;
    }

    // initMouseEvent(type, canBubble, cancelable, view, clickCount, 
    //                screenX, screenY, clientX, clientY, ctrlKey, 
    //                altKey, shiftKey, metaKey, button, relatedTarget);

    var simulatedEvent = document.createEvent("MouseEvent");
    simulatedEvent.initMouseEvent(type, true, true, window, 1, 
                                  first.screenX, first.screenY, 
                                  first.clientX, first.clientY, false, 
                                  false, false, false, 0/*left*/, null);

    first.target.dispatchEvent(simulatedEvent);
    event.preventDefault();
}

function init() 
{
    document.addEventListener("touchstart", touchHandler, true);
    document.addEventListener("touchmove", touchHandler, true);
    document.addEventListener("touchend", touchHandler, true);
    document.addEventListener("touchcancel", touchHandler, true);    
}

Я записал события касания, а затем вручную запустил собственные события мыши для соответствия. Хотя код не является особо универсальным, как он есть, он должен быть тривиальным для адаптации к большинству существующих библиотек перетаскивания и, вероятно, к большинству существующих кодов событий мыши. Надеюсь, эта идея пригодится людям, разрабатывающим веб-приложения для iPhone.

Обновление:

Публикуя это, я заметил, что вызов preventDefault для всех событий касания помешает правильной работе ссылок. Основная причина вообще вызвать preventDefault - это остановить прокрутку телефона, и вы можете сделать это, вызвав его только при обратном вызове touchmove . Единственным недостатком этого способа является то, что iPhone иногда будет отображать всплывающее окно при наведении курсора на точку начала перетаскивания. Если я найду способ предотвратить это, я обновлю этот пост.

Второе обновление:

Я обнаружил свойство CSS для отключения выноски: -webkit-touch-callout .

106
ответ дан 7 November 2019 в 07:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: