iOS автоматическое исправление зависания?

Я только что придумал довольно разумное решение, которое позволяет вам определять файлы для сборки и создавать каталоги автоматически. Сначала определите переменную ALL_TARGET_FILES, которая содержит имя файла для каждого файла, который будет создан ваш make-файл. Затем используйте следующий код:

define depend_on_dir
$(1): | $(dir $(1))

ifndef $(dir $(1))_DIRECTORY_RULE_IS_DEFINED
$(dir $(1)):
    mkdir -p $$@

$(dir $(1))_DIRECTORY_RULE_IS_DEFINED := 1
endif
endef

$(foreach file,$(ALL_TARGET_FILES),$(eval $(call depend_on_dir,$(file))))

Вот как это работает. Я определяю функцию depend_on_dir, которая принимает имя файла и генерирует правило, которое заставляет файл зависеть от каталога, который его содержит, а затем определяет правило для создания этого каталога, если это необходимо. Затем я использую foreach в call эту функцию для каждого имени файла и eval.

Обратите внимание, что вам понадобится версия GNU make, которая поддерживает eval, что я думаю - версии 3.81 и выше.

16
задан DADU 5 April 2011 в 22:25
поделиться

4 ответа

Попробуйте это:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>iPad Experiment</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            if(navigator.platform == "iPad") {
                $("a").each(function() { // have to use an `each` here - either a jQuery `each` or a `for(...)` loop
                    var onClick; // this will be a function
                    var firstClick = function() {
                        onClick = secondClick;
                        return false;
                    };
                    var secondClick = function() {
                        onClick = firstClick;
                        return true;
                    };
                    onClick = firstClick;
                    $(this).click(function() {
                        return onClick();
                    });
                });
            }
        });
    </script>
    <style type="text/css">
        a:hover {
            color:white;
            background:#FF00FF;
        }
    </style>
<body>
    <a href="http://google.ca">Google</a>
    <a href="http://stackoverflow.com">stackoverflow.com</a>
</body>
</html>

... или посмотрите демонстрацию на моем веб-сайте . Обратите внимание, что он настроен только для того, чтобы творить чудеса на iPad. Обнаружение всех версий iOS - еще один вопрос в моих книгах;)

Он работает на основе того факта, что ...

После того, как вы щелкнете ссылку на iphone или ipad, на нем останется смоделированное наведение мыши, которое запускает стилизацию a: hover css для этой ссылки. Если ссылка имеет обработчик javascript, который удерживает вас на той же странице, состояние наведения не изменится, пока вы не нажмете другую ссылку.

Образец цитирования: Safari iphone / ipad «зависание мыши» на новой ссылке после замены предыдущей ссылки на javascript

13
ответ дан Community 5 April 2011 в 22:25
поделиться

Вот еще одна оптимизированная версия, которая также обрабатывает закрытие : hover

. Вам нужно будет инкапсулировать свой сайт с помощью

<div id="container"></div>

, чтобы он мог Работа. Просто положить закрывающее событие на тело ничего не сделало

var bodyBound = false;
var container;

if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i) || navigator.userAgent.match(/iPad/i))
{
    container = $("#container");

     // Provoke iOS :hover event
    $("a.someLink").on("mouseover", handleHoverClick);
}

function handleClose(event)
{
    container.off("click", handleClose);

    bodyBound = false;
}

function handleHoverClick(event)
{
    if (!bodyBound)
    {
        bodyBound = true;

        // Somehow, just calling this function—even if empty—closes the :hover
        container.on("click", handleClose);
    }
}
3
ответ дан kotyy 5 April 2011 в 22:25
поделиться

Вот оптимизированная версия кода jQuery, предоставленного Ричардом Дж.П. Ле Гуэном:

$(document).ready(function() {

    $('a').each(function() {

        var clicked = false;

        $(this).bind('click', function() {

            if(!clicked) return !(clicked = true);
        });
    });
});
0
ответ дан DADU 5 April 2011 в 22:25
поделиться

Существует более простой способ исправить проблему с iOS и состояниями наведения, используя CSS. Для ссылки у вас есть проблема с установленным свойством cursor равным pointer, и состояние наведения будет игнорироваться в iOS. Все ссылки для правильной работы см. Ниже:

a
{cursor: pointer;}
0
ответ дан daniel18387 5 April 2011 в 22:25
поделиться
Другие вопросы по тегам:

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