Показать сообщение отдельно
  #22 (permalink)  
Старый 23.03.2019, 06:05
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

На каждой странице вам нужно определить значения для css, которые надо продемонстрировать. Этого достаточно, все остальное возьмет на себя подключаемый js-файл, который единый для всех страниц. Но тут встает вопрос - достаточно ли определить наборы изменяемых значений как массив? Если стили, которые будут описаны на ваших страницах для этого требуют только одно css правило, то да. А если для этого потребуется более одного правила?

Лучше определять правила как массив объектов, в котором указаны правила и их изменяемые значения, в примере это rules. Здесь нужно только соблюдать соглашение - количество изменяемых значений у каждого правила должно быть одинаково (хотя и этот вопрос решаем, но пока это не рассматривается). В примере после запуска, просмотра, удалите комментарий объекта описывающего правило box-shadow, будут работать два правила.

Подключаемый js-файл js.js работает с определенными в объекте rules css правилами и их значениями, которые применяет к объекту демонстратору #visualizer и отображает их в объекте #informer

var i = 0, //кольцевой счетчик демонстраций
    k = rules[0].values.length, //определили количество демонстраций
    visual = document.getElementById('visualizer'), //объект демонстратор
    info = document.getElementById('informer'); //объект информатор
    
//показываем первую демонстрацию
getRules();

//устанавливаем обработчик смены демонстраций
visual.addEventListener('click', function() {
   //увеличили счетчик демонстраций, если он выйдет за пределы, то установим его в начало 
   i = ++i % k;
   //показать следующую демонстрацию
   getRules();
});

//функция применения и отображения текущих стилей  
function getRules() {
    //получим все правила и значения текущей демонстрации 
    var a = rules.map(function(e) {
        //формируем и возвращаем в массив правило и его значения
        return e.name + ': ' + e.values[i]; 
    });
    //применим правила к объекту демонстратору
    visual.style.cssText = a.join(';');
    //покажем правила в объекте информаторе
    info.innerHTML = a.join(';<br>');     
}

Последний раз редактировалось laimas, 23.03.2019 в 07:40.
Ответить с цитированием