2017-01-19 6 views
0

Я настраиваю файл шаблона HTML в подкаталоге блога Jekyll. В зависимости от размера экрана, я хочу, чтобы страница выставляла элементы по-разному (я решил не использовать в этом случае медиа-запросы CSS).Как установить значение переменной жидкости внутри Javascript

Как я понимаю, Liquid не поддерживает обнаружение размера экрана, я хочу использовать JS для этого. В верхней части шаблона HTML, я хочу, чтобы вставить следующий код:

<script> 
    if (window.matchMedia("(max-width: 768px)").matches) { 
     {% assign screen_size = "small" %} 
    } else if (window.matchMedia("(min-width: 769px)").matches){ 
     {% assign screen_size = "large" %} 
    } 
</script> 

Как-то на экранах меньше, чем 769px, переменная screen_size тем не менее, получение устанавливается в large. Для меня нет сомнений, что JS-код правильно определяет размер экрана, но кажется, что screen_size просто получает привязку к любому последнему значению в условном выражении.

Я новичок в Liquid и не думаю, что вы можете просто использовать {% assign %} как в JS, так что это кажется подозрительным. Но как будет/нужно делать такое присвоение жидкой переменной в JS?

(screen_size относится только к этому шаблону и никто другой.)

+0

Я боюсь, что Liquid запускается на сервере, и вы смешаете его с js-кодом на стороне клиента. Я боюсь, что это не сработает. Вам нужно найти решение js для ваших макетов, только ! –

+0

Где бы вы использовали 'screen_size'? Назначение жидкости выполняется при рендеринге веб-сайта, поэтому не имеет смысла использовать его в JS. – marcanuy

+0

'screen_size' будет использоваться далее на странице среди HTML в выражении' if', поэтому примерно так: '{% if screen_size ==" small "%}

' и макет страницы ... – orlando21

ответ

3

См What is the difference between client-side and server-side programming?, а затем учесть, что при создании статического сайта с Джекила, значения, используемые жидкости определяются , прежде чем загружать страницы в веб-сервер.

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

Это невозможно.

Я рекомендую изменить свое мнение о медиа-запросах и написать вместо этого стандартный отзывчивый сайт.

+0

Спасибо, что я этого не знал. Итак, очевидно, что JS выполняется так, как будто нет жидкого кода? – orlando21

+0

@ orlando21 - Да. – Quentin