Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.03.2017, 23:57
Интересующийся
Отправить личное сообщение для serdeles Посмотреть профиль Найти все сообщения от serdeles
 
Регистрация: 13.11.2009
Сообщений: 13

Динамическая замена классов CSS при изменении ширины окна
Приветствую!

Пытаюсь в качестве тренировки-практики сделать следующее: при изменении ширины окна к тегу body динамично (в процессе) должны применяться различные классы CSS. Пока что там заданы разные цвета под различную ширину окна в пикселях.

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

Исходя из результата, имею четыре вопроса:

1) Почему по умолчанию не применяется ни один из классов, хотя в условии else прописано, что если все прочие условия ложные, надо применить класс eight (серый бэкграунд)?

2) Почему если тянуть правую границу окна влево, уменьшая его ширину, никаких изменений не происходит?

3) Как грамотно оптимизировать код js? Его слишком много, по-моему.

4) Будет ли работать подобное решение на различных девайсах и платформах? Или проще вообще забить на JS и юзать для адаптивности @media запросы CSS?


HTML:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery 1</title>

<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/screens.js" type="text/javascript"></script>

<style type="text/css">
   
    .one{background-color: green;}
	.two{background-color: red;}
	.three{background-color: darkviolet;}
	.four{background-color: chocolate;}
	.five{background-color: blue;}
	.six{background-color:darkolivegreen;}
	.seven{background-color: black;}
	.eight{background-color: grey;}
	
	#txt{font-size: 60px; color: white; font-family: sans-serif;}

</style>


</head>

<body>
<h1 id = "txt"></h1>



</body>
</html>



JS (screens.js):

$(function() {
       $(window).on('resize', function() {
          
	var html = document.documentElement;
	var x = html.clientWidth;
	
	if (x > 480 && x <= 640) {
		$('body').addClass('one');
		$('#txt').html(x);
	}
	
	else if (x > 640 && x <= 768) {
		$('body').addClass('two');
		$('#txt').html(x);
	}
	
	else if (x > 768 && x <= 800) {
		$('body').addClass('three');
		$('#txt').html(x);
	}
	
	else if (x > 800 && x <= 960) {
		$('body').addClass('four');
		$('#txt').html(x);
	}
	
	else if (x > 960 && x <= 1024) {
		$('body').addClass('five');
		$('#txt').html(x);
	}
	
	else if (x > 1024 && x <= 1280) {
		$('body').addClass('six');
		$('#txt').html(x);
	}
	
	else if (x > 1280 && x <= 1920) {
		$('body').addClass('seven');
		$('#txt').html(x);
	}
		   else {$('body').addClass('eight');}		  
       });
    });


P. S. В теге h1 всё работает как надо: туда динамически подставляется текущее значение ширины окна в пикселях.
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2017, 00:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от serdeles
Почему по умолчанию не применяется ни один из классов
потому что нет события 'resize'
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2017, 00:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от serdeles
Почему если тянуть правую границу окна влево, уменьшая его ширину, никаких изменений не происходит?
а кто классы удалять будет?
Ответить с цитированием
  #4 (permalink)  
Старый 11.03.2017, 00:55
Интересующийся
Отправить личное сообщение для serdeles Посмотреть профиль Найти все сообщения от serdeles
 
Регистрация: 13.11.2009
Сообщений: 13

Благодарю.
Ответить с цитированием
  #5 (permalink)  
Старый 11.03.2017, 01:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,112

Сообщение от serdeles
проще вообще забить на JS и юзать для адаптивности @media запросы CSS?

но если очень хочется
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery 1</title>

<style type="text/css">

    .one{background-color: green;}
  .two{background-color: red;}
  .three{background-color: darkviolet;}
  .four{background-color: chocolate;}
  .five{background-color: blue;}
  .six{background-color:darkolivegreen;}
  .seven{background-color: black;}
  .eight{background-color: grey;}

  #txt{font-size: 60px; color: white; font-family: sans-serif;}

</style>


  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
    var b = [0, 480, 640, 768, 800, 960, 1024, 1280, 1920];
    $(window).on("resize", function() {
        var c = document.documentElement.clientWidth,
            d = 0;
        b.every(function(a, b) {
            return c > a ? (d = b, !0) : !1
        });
        var a = "eight one two three four five six seven eight";
        $("body").removeClass(a).addClass(a=a.split(" ")[d]);
        $("#txt").html(c + " " + a)
    }).trigger("resize")
});
  </script>
</head>

<body>
<h1 id="txt">1526</h1>
</body>
</html>
Ответить с цитированием
  #6 (permalink)  
Старый 11.03.2017, 09:47
Интересующийся
Отправить личное сообщение для serdeles Посмотреть профиль Найти все сообщения от serdeles
 
Регистрация: 13.11.2009
Сообщений: 13

Блин, круто. Спасибо! :-)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое получение ширины и высоты окна браузера Esseron Элементы интерфейса 2 04.04.2011 16:00
Два блока div разъезжаются при скроллинге окна браузера. call007 jQuery 0 03.04.2011 16:21
динамическая подгрузка css в head. socengel AJAX и COMET 10 23.03.2011 17:43
Как сделать? При выходе мышкой за пределы окна браузера, начинает грузится другая стр alb Events/DOM/Window 13 01.09.2010 12:19
Вывод данных единожды, при открытии окна? Ggorsh Events/DOM/Window 1 28.04.2009 01:04