Изящная деградация jQuery

Я хочу украсить некоторые области своего веб-сайта несколькими анимациями jQuery здесь и там, и я хочу полностью заменить свой код AJAX, поскольку у моего существующего кода есть некоторые проблемы с кроссбраузерностью. Однако, поскольку jQuery является библиотекой JavaScript, меня беспокоит, что мои страницы некорректно работают, когда JavaScript отключен или отсутствует в браузере пользователя.

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

В настоящее время я делаю такие всплывающие подсказки с помощью CSS. У меня есть родительский div, который содержит изображение целевого значка класса «информация». Затем у меня есть div внутри этого с классом «всплывающая подсказка», который при наведении курсора на класс «информация», в котором он содержится, отображается, но в нормальном состоянии скрыт. Когда я прочитал об этом, я подумал, что это довольно умно, и, поскольку JavaScript не используется, он работает в любом браузере, совместимом с CSS.

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

Итак, я предполагаю, что я спрашиваю, как сделать так, чтобы сайт jQuery изящно деградировал в браузерах, которые не поддерживают JavaScript, но в остальном делать поддерживает большую часть CSS? Моя цель состоит в том, чтобы сайт функционировал на базовом уровне для всех пользователей, независимо от выбора браузера. Анимация - хороший пример, но меня также беспокоят более динамичные элементы, такие как автоматическое обновление с помощью AJAX и т.д. такая разлагаемость могла быть достигнута?

Спасибо

PS: Совершенно неуместно, но Firefox, похоже, думает, что «разлагаемость» - это не слово, а «биоразлагаемость» (с префиксом «био»). Странный...

Просто добавил решение «удалить класс», проиллюстрированное функцией javascript.

VonC 21.11.2008 11:31
Поведение ключевого слова "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) для оценки ваших знаний,...
10
1
4 150
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Если вы рассматриваете «Каскадный порядок» css, не могли бы вы просто добавить стиль css в самый конец всего вашего предыдущего определения css, чтобы отменить любой эффект css, который у вас есть в настоящее время для эффекта всплывающей подсказки?

Это правило css будет объявлено только в том случае, если Javascript активирован и обнаружен JQuery.

Таким образом, вы уверены, что ваш эффект всплывающей подсказки css не конфликтует с вашим эффектом JQuery.

Что-то типа:

a.info:hover span{ display:none}

с использованием класса "js_enabled", чтобы сделать это правило css условным.

Вы также можете сделать это с помощью добавление правила css на лету:

function createCSSRule(rule,attributes)
{
    //Create the CSS rule
    var newRule = "\n"+rule+"{\n";
    for (var attribute in attributes)
    {
        newRule += "\t" + attribute + ": " + attributes[attribute] + ";\n";
    }
    newRule += "}\n";

    //Inject it in the style element or create a new one if it doesn't exist
    styleTag = $E('style[type = "text/css"]') || new Element("style").setProperty('type','text/css').injectInside(document.head);
    if (window.ie)
    {
        styleTag.styleSheet.cssText += newRule;
    }
    else
    {
        styleTag.appendText(newRule);
    }
}

Самое простое решение для Разделение CSS и Javascrip - это удалите свой класс css

function jscss(a,o,c1,c2)
{
  switch (a){
    case 'swap':
      o.className=!jscss('check',o,c1)?o.className.replace(c2,c1): <-
      o.className.replace(c1,c2);
    break;
    case 'add':
      if (!jscss('check',o,c1)){o.className+=o.className?' '+c1:c1;}
    break;
    case 'remove':
      var rep=o.className.match(' '+c1)?' '+c1:c1;
      o.className=o.className.replace(rep,'');
    break;
    case 'check':
      return new RegExp('\\b'+c1+'\\b').test(o.className)
    break;
  }
}

В этом примере функции используются четыре параметра:

a
определяет действие, которое должна выполнять функция. o
рассматриваемый объект. c1
название первого класса
c2
название второго класса

Возможные действия:

swap
заменяет класс c1 на класс c2 в объекте o.
add
добавляет класс c1 к объекту o.
remove
удаляет класс c1 из объекта o.
check
проверить, применяется ли класс c1 к объекту o и возвращает ли он истину или ложь.

Другой способ сделать то же самое - добавить класс к тегу body с помощью javascript (например, class = "js_enabled" или что-то в этом роде), а затем переопределить правила стилей для потомков этого класса.

Matthew Crumley 21.11.2008 10:27

Хм ... Моя текущая подсказка использует display: none; чтобы скрыть всплывающую подсказку, когда его родительский класс не наведен. Поэтому в идеале мне нужно Удалить этой строки CSS из класса, если jQuery работает, что немного отстает от этого примера. Хм, действительно ...

Nicholas Flynt 21.11.2008 10:29

О Конечно. Второй класс для переопределения правил первого. Почему я не подумал об этом раньше? (Я комментировал слишком быстро, просто увидел комментарий номер один.)

Nicholas Flynt 21.11.2008 10:30

Вау, на самом деле исправить это было довольно просто. Я просто полностью заменяю класс (используя функции removeClass и addClass) после загрузки страницы для всех моих всплывающих подсказок, и он отлично работает. Огромное спасибо!

Nicholas Flynt 21.11.2008 11:12

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

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

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

Nicholas Flynt 23.11.2008 02:30

Чувак, у тебя же браузерная игра? У вас менее 1% пользователей с отключенным JS! И этот 1% - апокалиптическое число, потому что я могу СТАВИТЬ, что у вас меньше этого;)

В любом случае, если вас это действительно беспокоит, просто создайте сайт без какого-либо JavaScript. И сделать его работоспособным на 100%. После того, как ваш сайт будет работать полностью без какой-либо разновидности JS, просто начните улучшать его с помощью jQuery (или любой другой библиотеки; jQuery - лучший вариант: P). Но с осторожностью: не изменяйте НИКАКОГО из вас HTML. Это проще, чем кажется;)

И да, если у вас есть вещи, которые работают без JS (например, эти всплывающие подсказки), сохраните их!

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