#javascript #css
#javascript #css
Вопрос:
У меня есть заголовок с фоновым изображением css, которое я хочу прокручивать в сторону со скоростью 1 пиксель каждые 50 мс. Однако фоновое изображение меняется в зависимости от времени на компьютере пользователя, и я не могу понять, как я буду это делать. Я написал код для самой боковой прокрутки, но больше ничего.
Javascript, используемый для боковой прокрутки (больше ничего):
setInterval("mvheader()",50);
function mvheader () {
window.cssXPos=window.cssXPos 1;
if (window.cssXPos>=window.cssMaxWidth) {
window.cssXPos=0;
}
toMove=document.getElementById("header");
toMove.style.backgroundPosition=window.cssXPos "px 0px";
}
Раньше JavaScript использовал другой файл css в зависимости от времени:
function styleSwitcher() {
var currentTime = new Date().getHours();
if (0 <= currentTimeamp;amp;currentTime < 6) {
document.write("<link rel='stylesheet' href='css/night.css' type='text/css'>");
}
if (6 <= currentTimeamp;amp;currentTime < 18) {
document.write("<link rel='stylesheet' href='css/day.css' type='text/css'>");
}
if (18 <= currentTimeamp;amp;currentTime <= 24) {
document.write("<link rel='stylesheet' href='css/night.css' type='text/css'>");
}
}
styleSwitcher();
CSS (единственное отличие от других файлов — это название папки. ночь вместо дня и наоборот):
#header {
background-image:url(../img/day/tile.png);
background-repeat:repeat-x;
position:absolute;
height:100px;
width:100%;
top:0;
left:0;
z-index:9;
}
Комментарии:
1. Так в чем именно проблема? Прокрутка не работает? Или это работает, как ожидалось, но изменение таблиц стилей — нет? Где вы вызываете
styleSwitcher()
функцию? Побочный вопрос: есть ли особая причина для кэширования CSSXPOS в объекте window?2. Прокрутка не работает.
styleSwitcher()
Функция выполняется из того же файла JavaScript, в котором находится функция.3. @WTK Что касается побочного вопроса, я просто подумал, что это повысит производительность.
4. Хорошо, в целом это выглядит как простая задача (прокрутка изменение css в зависимости от времени суток). Я рассмотрю это завтра, если кто-нибудь не поможет вам ночью 🙂
Ответ №1:
Хорошо, итак, было несколько проблем с вашим скриптом боковой прокрутки:
- запуск функции mvheader перед загрузкой документа (я предполагаю, что ваш код был во внешнем файле js)
- использование выражения:
setInterval("mvheader()", 50)
это будет работать так, как ожидалось, однако использование этого синтаксиса сводится к тому, что javascript должен интерпретировать строку, переданную в качестве первого аргумента. Вы можете использоватьsetInterval(mvheader, 50)
как эквивалент — как вы можете видеть, теперь вы бы передали функцию в качестве параметра в setInterval - не используется ключевое слово «var» при определении переменной ToMove — это не будет работать должным образом в IE
- загрязнение глобальной области видимости (объекта window) дополнительными переменными cssXPos и cssMaxWidth
Я изменил ваш код, и вы можете проверить рабочую версию здесь:http://jsfiddle.net/wtk_pl/ydJhr/4 /.
Оно работает нормально, однако я также создал вторую, более чистую версию, которая не загрязняет глобальную область новыми переменными и должна работать лучше, потому что я «кэширую» #header
узел в переменной, а не ищу его на каждой итерации mvheader()
. Проверьте это здесь: http://jsfiddle.net/wtk_pl/ydJhr/9 /
Что касается загрузки разных css в зависимости от времени суток — это полностью выполнимо из javascript, однако я бы рекомендовал вам сделать это на стороне сервера (что означает определение и внедрение правильного файла css перед отправкой содержимого страницы пользователю) — зачем беспокоить этим скрипт на стороне клиента?
Комментарии:
1. Предполагалось, что тема будет меняться в зависимости от времени пользователя. Но я полагаю, я мог бы что-то сделать с GeoIP и получить часовой пояс пользователя, а затем отправить им правильный файл css.