Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Простая проблема (https://javascript.ru/forum/dom-window/79996-prostaya-problema.html)

Сергей Ракипов 15.04.2020 14:16

Простая проблема
 
Долго не хотел писать сюда, так как мне кажется проблема пустяковая, но все перебрал и не нашел решение.

let main = document.querySelector("main");
let li_1 = document.querySelector("li:nth-child(1)");
let li_2 = document.querySelector("li:nth-child(2)");
let li_3 = document.querySelector("li:nth-child(3)");
let li_4 = document.querySelector("li:nth-child(4)");
let li_5 = document.querySelector("li:nth-child(5)");

li_1.onmouseover = test1;

function test1(){
	main.style.backgroundImage = "url('images/pic6.jpg')";

}

li_1.onmouseout = test2;

function test2(){
	main.style.backgroundImage = "url('images/color.png')";
}


background-image: url("../images/color.png");
	background-repeat: no-repeat;
	background-position: center center;
	background-size: cover;
	transition: all 2s;



При наведении скорость 2сек, а когда убирает установления скорость пропадает

как сделать что бы и когда мышка уходит скорость тоже была 2 сек.

voraa 15.04.2020 14:41

Цитата:

Сообщение от Сергей Ракипов (Сообщение 522832)
background-image: url("../images/color.png");
	background-repeat: no-repeat;
	background-position: center center;
	background-size: cover;
	transition: all 2s;



При наведении скорость 2сек, а когда убирает установления скорость пропадает

как сделать что бы и когда мышка уходит скорость тоже была 2 сек.

Эти стили к чему относятся?
И где коды связанные с наведением мыши?

Сергей Ракипов 15.04.2020 14:44

<!doctype html>
<html lang="ru">
<head>
	<meta charset="utf-8">
	<title>index</title>
	<style>
	@charset "utf-8";
/* CSS Document */
*{
	margin: 0;
	padding: 0;
}
body{

	font-family: Verdana, Geneva CY, Helvetica, DejaVu Sans, Arial, sans-serif;
	font-size: .8rem;
	line-height: 160%;
}
main{
	width: 100vw;
	height: 100vh;
	background-image: url("../images/color.png");
	background-repeat: no-repeat;
	background-position: center center;
	background-size: cover;
	transition: background-image 2s;
	display: grid;
	justify-items: center;
	justify-content: center;
	grid-template-rows: minmax(320px, 640px) auto;
	grid-template-columns: 1fr;
	grid-area: 
	"header"
	"nav";	
}
header{
	grid-area: "header";
	font-family: Constantia, "Lucida Bright", "DejaVu Serif", Georgia, "serif";
	font-size: 5.5rem;
	color: #fff;
	text-shadow: 0px 0px 3px #423F3B;
	align-self: end;
}
nav{
	grid-area: "nav";
	margin: 60px 0px 0px 0px;
}
ul{
	display: flex;
	justify-content: center;
}
li{
	list-style: none;
	cursor: pointer;
	margin: 0px 20px 0px 20px;
}
li:nth-child(1){

}
li:nth-child(2){

}
li:nth-child(3){

}
li:nth-child(4){

}
li:nth-child(5){

}
	</style>
</head>

<body>
	<main>
		<header>
		Шарлин Корзе
		</header>
		<nav>
			<ul>
				<li>Page</li>
				<li>Page</li>
				<li>Page</li>
				<li>Page</li>
				<li>Page</li>
			</ul>
		</nav>
	</main>
<script>
let main = document.querySelector("main");
let li_1 = document.querySelector("li:nth-child(1)");
let li_2 = document.querySelector("li:nth-child(2)");
let li_3 = document.querySelector("li:nth-child(3)");
let li_4 = document.querySelector("li:nth-child(4)");
let li_5 = document.querySelector("li:nth-child(5)");

li_1.onmouseover = test1;

function test1(){
	main.style.backgroundImage = "url('images/pic6.jpg')";

}

li_1.onmouseout = test2;

function test2(){
	main.style.backgroundImage = "url('images/color.png')";
}
</script>
</body>
</html>

Сергей Ракипов 15.04.2020 14:52

Я сейчас методом тыка понял что если убрать из style
background-image: url("../images/color.png");


то будет работать так как нужно, не понимаю логику почему но работает

а можно как то сделать что бы плавность была за счет скрипта

Сергей Ракипов 15.04.2020 14:54

И почему когда резко убираешь то плавность пропадает при уходе с элемента

voraa 15.04.2020 15:18

background-image: - вообще не анимируется.
https://developer.mozilla.org/en-US/...ted_properties

Сергей Ракипов 15.04.2020 15:24

Цитата:

Сообщение от voraa (Сообщение 522841)
background-image: - вообще не анимируется.
https://developer.mozilla.org/en-US/...ted_properties

а что у меня тогда там анимируется, я же вижу анимацию

voraa 15.04.2020 15:49

Note: The set of properties that can be animated is changing as the specification develops.

https://developer.mozilla.org/en-US/...SS_transitions

Это означает, что в спецификацию для анимирования это свойство пока не включено. И браузер имеет полное право делать с ним что угодно. Файрфокс вообще не анимирует, Хром что то пытается сделать, но кривовато пока.
Вообще не понятно что анимировать.
При анимации параметр должен плавно изменяться от начального значения до конечного. Значение может быть каким то размером, цветом, прозрачностью, т.е. иметь какую то числовую величину. А что у картинки?
Можно менять прозрачность, например. Наложить две картинки друг на друга и менять прозрачность верхней от 0 (прозрачная) до 1 (не прозрачная) Может хром и пытается это делать как то, но пока не всегда успешно.

Malleys 15.04.2020 16:33

Цитата:

Сообщение от Сергей Ракипов
а что у меня тогда там анимируется, я же вижу анимацию

Вы видите браузерную ошибку, «баг» — согласно спецификации, это свойство анимируется дискретно, т. е. переключается между двумя адресами картинок. (https://drafts.csswg.org/css-backgro...ckground-image)

Цитата:

Сообщение от voraa
А что у картинки?

У картинки в будущем будет функция cross-fade(), которая позволяет свести несколько картинок при определённой непрозрачности.

Цитата:

Сообщение от voraa
И браузер имеет полное право делать с ним что угодно.

Ничего не делать, а то что вы видите в Chrome — это cross-fade со старым синтаксисом.

Цитата:

Сообщение от Сергей Ракипов
И почему когда резко убираешь то плавность пропадает при уходе с элемента

Потому что в webkit-браузерах используется cross-fade, который не может далее анимироваться, пока предыдущая анимация не завершилась (а она не успевает завершиться, поскольку вы резко убираете курсор, запуская следующую анимацию)

То, что вы хотите сделать, можно сделать так (без дополнительных и лишних элементов)...

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width">
	</head>
	<body>
		<nav>
			<a href="#" class="default">Default</a>
			<a href="#" style="--image: url('https://placeimg.com/640/480/nature');">Nature</a>
			<a href="#" style="--image: url('https://placeimg.com/640/480/tech');">Tech</a>
			<a href="#" style="--image: url('https://placeimg.com/640/480/animals');">Animals</a>
		</nav>
		<style>
			
		body {
			margin: 0;
			overflow: hidden;
			height: 100vh;
			background: radial-gradient(circle at calc(100vw - 10rem) 25vh, #f1f1f1, #888);
		}

		nav {
			display: grid;
			align-content: end;
			justify-content: center;
			height: 100vh;
			overflow: auto;
			grid-auto-flow: column;
		}
			
		a {
			padding: .5em 1em;
			margin: .5em;
			border: .1em solid;
			color: deepskyblue;
			text-decoration: none;
			display: inline-block;
			border-radius: .5em;
			overflow: auto;
			font: bold 200% "Helvetica Neue", "Segoe UI", Roboto, Ubuntu, sans-serif;
		}
		
		a.default {
			visibility: hidden;
			position: absolute;
		}
			
		a::after, .default::after {
			content: "";
			position: fixed;
			top: 0; bottom: 0;
			left: 0; right: 20rem;
			background:
				center / cover
				no-repeat #333;
			background-image:
				var(--image, url('https://placeimg.com/800/600/people')),
				radial-gradient(#333, black);
			padding: 1em;
			pointer-events: none;
			transition: opacity 350ms 200ms, transform 350ms 200ms, visibility 0s 550ms;
			opacity: 0;
			transform: scale(2);
			visibility: hidden;
			will-change: opacity, transform, visibility;
			z-index: -1;
		}
			
		@media (max-width: 75em) {
			a::after, .default::after {
				right: 0rem;
			}
		}
			
		.default::after {
			z-index: -2;
		}
			
		a:hover::after, .default:after {
			opacity: 1;
			transform: scale(1);
			visibility: visible;
			transition: opacity 350ms, transform 350ms, visibility 0s 0s;
		}
		</style>
	</body>
</html>

Сергей Ракипов 17.04.2020 08:36

Цитата:

Сообщение от voraa (Сообщение 522843)
Note: The set of properties that can be animated is changing as the specification develops.

https://developer.mozilla.org/en-US/...SS_transitions

Это означает, что в спецификацию для анимирования это свойство пока не включено. И браузер имеет полное право делать с ним что угодно. Файрфокс вообще не анимирует, Хром что то пытается сделать, но кривовато пока.
Вообще не понятно что анимировать.
При анимации параметр должен плавно изменяться от начального значения до конечного. Значение может быть каким то размером, цветом, прозрачностью, т.е. иметь какую то числовую величину. А что у картинки?
Можно менять прозрачность, например. Наложить две картинки друг на друга и менять прозрачность верхней от 0 (прозрачная) до 1 (не прозрачная) Может хром и пытается это делать как то, но пока не всегда успешно.

Очень разумное обоснование, я понял.


Часовой пояс GMT +3, время: 00:02.