Jquery Style Switcher - Как убрать мерцание стиля при загрузке .css? - PullRequest
0 голосов
/ 21 июля 2011

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

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

Спасибо за чтение!

У меня есть этот код для переключения стилей на моем сайте:

HTML для вызова основного стиля и основного цвета

   <style type="text/css"> @import url("style.css");</style>
   <link href="yellow.css" rel="stylesheet" type="text/css" title="Yellow Theme" />

Тогда я вызываю сценарии как обычно

    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript" src="script.js"></script>

Каждая кнопка имеет это:

    <a class="colorbox colorred" href="?theme=red" title="Red Theme"><img src="red.png" width="x" height="x" /></a>

Теперь вот код script.js:

    google.load("jquery", "1.3.1");
    google.setOnLoadCallback(function()
    {

// Color changer
$(".colorblack").click(function(){
    $("link").attr("href", "black.css");
    return false;
});

$(".colorred").click(function(){
    $("link").attr("href", "red.css");
    return false;
});

$(".colorwhite").click(function(){
    $("link").attr("href", "white.css");
    return false;
});

$(".coloryellow").click(function(){
    $("link").attr("href", "yellow.css");
    return false;
});

    });

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Хорошо.Я провел немного больше исследований и экспериментов в этом, и я думаю, что нашел решение.Сначала немного справочной информации.Насколько я могу судить, проблема с мерцанием в том, что css загружается не полностью.Обычно вы хотите, чтобы загрузка выполнялась при загрузке страницы, если это не является серьезной проблемой производительности.Вы можете загружать их динамически по мере необходимости, но это приводит к проблеме, которая возникает у нас здесь, когда вы пытаетесь использовать данные, которые еще не загружены.Лучшее решение, которое я вижу, это загрузить все CSS в начале и динамически изменить их приоритет.Я проверил это, и это работает.с каскадными таблицами стилей (css) каскадная часть имени означает, что когда вы загружаете таблицу стилей, а затем загружаете другую, последняя имеет приоритетный приоритет.Моей первой мыслью было просто добавить еще одну таблицу стилей, которая переопределит предыдущую.Таким образом, при загрузке старая таблица стилей все еще использовалась, и мерцания не было.Единственная проблема, с которой я столкнулся, заключалась в том, что приоритет связанной таблицы стилей меняется на противоположный, то есть вам нужно переопределить первый, а не последний.Вот код, иллюстрирующий этот процесс:

<html>
<head>
<link href="yellow.css" rel="stylesheet" type="text/css" title="Yellow Theme" />
<link href="black.css" rel="stylesheet" type="text/css" title="Black Theme" />
<link href="white.css" rel="stylesheet" type="text/css" title="White Theme" />
<link href="red.css" rel="stylesheet" type="text/css" title="Red Theme" />
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function(){

  $(".colorblack").click(function(){
    $("link:first").attr("href", "black.css");
    return false;
  });

  $(".colorred").click(function(){
    $("link:first").attr("href", "red.css");
    return false;
  });

  $(".colorwhite").click(function(){
    $("link:first").attr("href", "white.css");
    return false;
  });

  $(".coloryellow").click(function(){
    $("link:first").attr("href", "yellow.css");
    return false;
  });

});
</script>
</head>
<body>
 <a class="colorbox colorred" href="?theme=red" title="Red Theme">red theme</a></br>
 <a class="colorbox colorblack" href="?theme=black" title="Black Theme">black theme</a></br>
 <a class="colorbox colorwhite" href="?theme=white" title="White Theme">white theme</a></br>
 <a class="colorbox coloryellow" href="?theme=yellow" title="Yellow Theme">yellow theme</a></br>
</body>
</html>

И CSS довольно прост.например,

body
{
  background-color:yellow;
}

Это работает в Chrome и FF, но не работает в IE или Opera.Замена узлов связи, кажется, не работает так же хорошо в этих двух.Но в основном, вот как ты это делаешь.:)

0 голосов
/ 21 июля 2011

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

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