Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2018, 00:41
Аватар для irchik
Новичок на форуме
Отправить личное сообщение для irchik Посмотреть профиль Найти все сообщения от irchik
 
Регистрация: 09.11.2018
Сообщений: 2

Замена фона при нажатии кнопки и в зависимости от разрешения экрана
Здравствуйте! Есть кнопка, которая отвечает за замену фона на сайте, она работает на:

<img src="knopka.png" onClick="return setBg1()">

<script>
<!--
var countPress = 1;
function setBg1() {
countPress++;
if (countPress == 2) {document.body.style.backgroundImage = 'url(noch.png)';}
if (countPress == 3) {document.body.style.backgroundImage = 'url(den.png)';
countPress = 1;}
}
//-->
</script>

и есть мобильная версия сайта для разрешения <1200, где два других фона, которые тоже нужно переключать кнопкой.
я не придумала ничего умнее, чем скрыть первую кнопку с помощью display:none; и проявить вторую кнопку, при нажатии на которую срабатывает скрипт-клон, но с другими фонами:

<img src="knopka.png" onClick="return setBg2()">

<script>
<!--
var countPress = 1;
function setBg2() {
countPress++;
if (countPress == 2) {document.body.style.backgroundImage = 'url(nochmobil.png)';}
if (countPress == 3) {document.body.style.backgroundImage = 'url(denmobil.png)';
countPress = 1;}
}
//-->
</script>

в итоге всё работает отдельно в браузере и отдельно на телефоне, но не работает (что логично) при масштабировании экрана браузера, потому что при этом процессе первый скрипт не отключается, пока не происходит нажатие кнопки(которая видна только в мобильной версии), и она уже включает второй скрипт, ну и при обратном масштабировании мобильный фон конечно же остается в полной версии, пока не будет нажата кнопка, которая видна только в полной версии.

Я пыталась подключить $(window).resize(function(), чтобы скрипт отключался при определенном разрешении - не сработало,
чтобы принудительно включался мобильный фон при уменьшении окна - сработало, но тут либо один, либо второй, то есть если полный фон светлый - то мобильный тоже светлый, а если полный фон темный - то мобильный тоже должен быть темным, но получалось переключить оба либо на светлый, либо на темный.

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

Последний раз редактировалось irchik, 09.11.2018 в 00:49.
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2018, 01:38
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

<!doctype html>
<html>
	<head>
		<title></title>
		<style>
			body {
				background: black no-repeat center;
				height: 100vh;
				margin: 0;
			}

			@media (max-width: 1200px) {
				body.day {
					background-image: url(https://placeimg.com/640/480/nature/grayscale);
				}
				body.night {
					background-image: url(https://placeimg.com/640/480/nature);
				}
			}

			@media not all and (max-width: 1200px) {
				body.day {
					background-image: url(https://placeimg.com/1280/960/nature/grayscale);
				}
				body.night {
					background-image: url(https://placeimg.com/1280/960/nature);
				}
			}

			button {
				border-radius: .5em;
				margin: 1em;
				padding: 1em;
				--color: #f06;
				font: bold 1.5em sans-serif;
				border: .25em solid var(--color);
				color: var(--color);
				background: white;
				transition: 300ms;
			}

			button:hover, button:focus {
				color: white;
				box-shadow: inset 0 0 0 2em var(--color); 
			}

		</style>
		<script>

			var count = 0;
			
			function setBg() {
				document.body.classList.toggle("day", count % 2 === 0);
				document.body.classList.toggle("night", count % 2 === 1);
				count++;
			}

			document.addEventListener("DOMContentLoaded", setBg);

		</script>
	</head>
	<body>
		<button onclick="setBg();">Переключить</button>
	</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 09.11.2018, 11:12
Аватар для irchik
Новичок на форуме
Отправить личное сообщение для irchik Посмотреть профиль Найти все сообщения от irchik
 
Регистрация: 09.11.2018
Сообщений: 2

Это великолепно!
Я в пищащем восторге! Я мучилась три дня, изучая всё подряд, а это так просто и изящно!! Спасибо огроменное!
Ответить с цитированием
  #4 (permalink)  
Старый 09.11.2018, 13:39
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103


небольшое дополнение
убрал day, стало одна строка classList.toggle
добавил outline: none; нет синей рамки при клике на кнопке
<!doctype html>
<html>
    <head>
        <title></title>
        <style>
            body {
                background: black no-repeat center;
                height: 100vh;
                margin: 0;
            }

            @media (max-width: 1200px) {
                body {
                    background-image: url(https://placeimg.com/640/480/nature/grayscale);
                }
                body.night {
                    background-image: url(https://placeimg.com/640/480/nature);
                }
            }

            @media not all and (max-width: 1200px) {
                body {
                    background-image: url(https://placeimg.com/1280/960/nature/grayscale);
                }
                body.night {
                    background-image: url(https://placeimg.com/1280/960/nature);
                }
            }

            button {
                border-radius: .5em;
                margin: 1em;
                padding: 1em;
                --color: #f06;
                font: bold 1.5em sans-serif;
                border: .25em solid var(--color);
                color: var(--color);
                background: white;
                transition: 300ms;
            }

            button:hover, button:focus {
                color: white;
                box-shadow: inset 0 0 0 2em var(--color);
            }
            button:focus {
                outline: none;
            }

        </style>
        <script>

            var count = 0;

            function setBg() {
                document.body.classList.toggle("night", count % 2 === 1);
                count++;
            }

            document.addEventListener("DOMContentLoaded", setBg);

        </script>
    </head>
    <body>
        <button onclick="setBg();">Переключить</button>
    </body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
плавный скролл при нажатии на кнопки клавиатуры(вниз, вверх) JohnJohn Общие вопросы Javascript 19 28.12.2017 03:40
Замена цвета в body при нажатии div id 3uk Элементы интерфейса 2 20.08.2017 11:27
движение текста при нажатии кнопки jquery imediasun1 Элементы интерфейса 10 31.01.2014 10:55
Смена изображений при нажатии кнопки. Rel60 Общие вопросы Javascript 1 14.09.2009 11:05
Изменение размера блока реклама в зависимости от разрешения экрана. toxiz77 Общие вопросы Javascript 3 11.02.2009 14:12