Сделайте так, чтобы div красиво исчезал через заданный промежуток времени

Как лучше всего заставить <div> исчезнуть через заданный промежуток времени (без использования некоторых доступных библиотек JavaScript).

Я ищу очень легкое решение, не требующее отправки в браузер огромной библиотеки JavaScript.

jQuery уменьшен до 15 КБ и может обрабатывать это в одной строке. Я не считаю это «огромным».

John Sheehan 24.09.2008 01:57

15 КБ огромны, для некоторых значений огромны. Зачем использовать 15 КБ, если достаточно 500 байт?

Adam Davis 24.09.2008 02:01

Браузеры @adam кешируют файл, поэтому 15 КБ предназначены только для первого использования. Кроссбраузерные преимущества jQuery намного превосходят разницу в 14,5 тыс.

Chris Sutton 24.09.2008 02:08

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

Jason Bunting 24.09.2008 02:25

Серьезно, вы делаете вывод о намерениях OP не меньше, чем ответы, предлагающие jQuery. Просто опубликуйте лучший ответ, если он у вас есть, и позвольте ОП и голосам решать. Вот как это должно работать.

John Sheehan 24.09.2008 08:06

Кроме того, в jQuery уже размещены предварительно минифицированные версии, на которые вы можете ссылаться, которые, скорее всего, уже будут кэшированы.

Sam Hasler 26.09.2008 21:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
6
12 675
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Не уверен, почему вы были бы так против использования чего-то вроде jQuery, которое сделало бы выполнение этого эффекта почти тривиальным, но, по сути, вам нужно обернуть серию изменений в правила -moz-opacity, opacity и filter: alpha CSS. в setTimeout ().

Или используйте jQuery и оберните вызов fadeOut () в setTimeout. Твой выбор.

Другой фанат jQuery проталкивает свою любимую библиотеку кому-то, кто заявил, что не хочет ее использовать ...: P

Jason Bunting 24.09.2008 02:09

Зачем изобретать велосипед? Если вам не нравится jquery, используйте scriptaculuos, mootools или что-то еще, что плавает ваша лодка. Глупо изобретать колесо заново.

DGM 24.09.2008 02:16

Не в этом дело - я использую библиотеку (MochiKit). Я хочу сказать, что исходный постер НЕ хотел, чтобы кто-то ответил «используйте библиотеку X» - но что происходит? Все и их мама соглашаются с этим. Не использовать библиотеку - это его выбор, и его вопрос в любом случае остается верным.

Jason Bunting 24.09.2008 02:22

ОП сказал, что они не хотят использовать библиотеку, но имеют неправильную логику. В таком случае, я думаю, это верное предложение. Если бы у них была веская причина не использовать библиотеку, все было бы иначе.

John Sheehan 24.09.2008 02:24

Понятно - OP может не знать о реальности некоторых из лучших библиотек, но нам также не следует пытаться читать его мысли - возможно, он просто плохо сформулировал свой вопрос, зная, насколько они малы, но по какой-то причине не могу использовать один.

Jason Bunting 24.09.2008 02:29

Мне просто кажется забавным, что всякий раз, когда на этом сайте задают чисто JavaScript-вопрос, фанатики jQuery сразу же отвечают «используйте jQuery!». даже если он не подходит для решения проблемы.

Jason Bunting 24.09.2008 02:30

По моему опыту, реальность ответа такова, что вы не найдете «легкого» решения для постепенного исчезновения элемента после задержки, которое будет работать в разных браузерах - концепция «изобретать колесо», безусловно, применима. . Также, честно говоря, он сказал, что не хочет «огромную библиотеку».

matt lohkamp 24.09.2008 04:07

Просто игнорируйте Джейсона, в какой-то момент jQuery задел его чувства, и, очевидно, ему нравится делать больше работы, чем необходимо.

John Sheehan 24.09.2008 08:03

В наши дни я бы всегда использовал для этого библиотеку - прогресс, которого они достигли, был феноменальным, и одна кроссбраузерная функциональность того стоит. Так что это не ответ. Я просто хотел бы отметить, что jQuery занимает всего 15 КБ.

Я знаю, что у вас мало библиотек, но я бы рекомендовал взглянуть на moo.fx: http://moofx.mad4milk.net/ - я думаю, что это как 3k.

jQuery тоже чертовски мал.

Используйте setTimeout с начальным временем для запуска процедуры затухания, а затем используйте setTimeout с низким таймером, чтобы шагать через уровень непрозрачности изображения, пока он не исчезнет.

Тем не менее, jQuery может быть уменьшен до 15 КБ и является одноразовой загрузкой для клиента, поэтому я бы не назвал его огромным.

Вот какой-то javascript, который это делает. Я нашел его где-то на веб-сайте учебника по javascript (который мне не удалось найти снова) и изменил его.

var TimeToFade = 200.0;

function fade(eid)
{
    var element = document.getElementById(eid);
    if (element == null) return;

    if (element.FadeState == null)
    {
        if (element.style.opacity == null || element.style.opacity == ''
               || element.style.opacity == '1') {
            element.FadeState = 2;
        } else {
            element.FadeState = -2;
        }
    }

    if (element.FadeState == 1 || element.FadeState == -1) {
        element.FadeState = element.FadeState == 1 ? -1 : 1;
        element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
    } else {
        element.FadeState = element.FadeState == 2 ? -1 : 1;
        element.FadeTimeLeft = TimeToFade;
        setTimeout("animateFade(" + new Date().getTime()
           + ",'" + eid + "')", 33);
    }
}

function animateFade(lastTick, eid)
{
    var curTick = new Date().getTime();
    var elapsedTicks = curTick - lastTick;

    var element = document.getElementById(eid);

    if (element.FadeTimeLeft <= elapsedTicks) {
        element.style.opacity = element.FadeState == 1 ? '1' : '0';
        element.style.filter = 'alpha(opacity = '
            + (element.FadeState == 1 ? '100' : '0') + ')';
        element.FadeState = element.FadeState == 1 ? 2 : -2;
        element.style.display = "none";
        return;
    }

    element.FadeTimeLeft -= elapsedTicks;
    var newOpVal = element.FadeTimeLeft/TimeToFade;
    if (element.FadeState == 1) {
        newOpVal = 1 - newOpVal;
    }

    element.style.opacity = newOpVal;
    element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';

    setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
}

Следующий HTML-код показывает, как это работает:

<html><head>
    <script type = "text/javascript" src = "fade.js"></script>
</head><body>
    <div id = "fademe" onclick = "fade( 'fademe' )">
        <p>This will fade when you click it</p>
    </div>
</body></html>

к сожалению, element.style.opacity не поддерживается постоянно между браузерами. Таблицы, в частности, трудно исчезать и появляться.

matt lohkamp 24.09.2008 04:10

Я пробовал этот код - он работает с таблицами в FF3 и Chrome, IE7 просто скрывает элементы, они вообще не исчезают.

Jason Bunting 24.09.2008 07:10

Если бы только был способ автоматически обрабатывать все эти кроссбраузерные вещи ... хм ...

John Sheehan 24.09.2008 08:07

Попробуйте библиотеку анимации YUI (пользовательский интерфейс Yahoo): http://developer.yahoo.com/yui/animation/

Не изобретайте велосипед. Библиотеки - наши друзья. :-)

Он не обязательно изобретает велосипед - возможно, ему не нужно все, что может предложить библиотека. Если мне нужна шина, я не покупаю всю машину только для того, чтобы снять с нее одну шину.

Jason Bunting 24.09.2008 07:11

Другие вопросы по теме