19.11.2021, 16:08
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сергей Ракипов,
<!DOCTYPE html>
<html lang="ru_RU">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
body {
background: #000;
font-family: Verdana;
font-size: 16px;
}
.blok {
margin: 40px 40px 40px 40px;
display: flex;
align-items: center;
}
.tekst {
margin: 0px 20px 0px 0px;
}
.tekst a {
color: #22AD1D;
}
.tekst a:hover {
color: #fff;
}
.ikonka {
width: 94px;
height: 94px;
}
.ikonka_pryas {
background-image: url(http://rakipov.ru/files/ikonka_prais_6.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 100%;
}
@media (max-width:640px) {
.ikonka {
width: 64px;
height: 64px;
}
.ikonka_pryas {
background-image: url(http://rakipov.ru/files/ikonka_prais_9.svg);
background-repeat: no-repeat;
background-position: center;
background-size: 100%;
}
}
</style>
<script>
jQuery(document).ready(function($) {
[8, 10].forEach(n => {
let img = new Image();
img.src = `http://rakipov.ru/files/ikonka_prais_${n}.svg`;
}); //предзагрузка картинок для hover, чтоб иконка не "прыгала", по желанию
$('.ssilka_prays').hover(function() {
// навели мышь на элемент
let n = window.matchMedia('(min-width: 640px)').matches ? 8 : 10;
let url = `url(http://rakipov.ru/files/ikonka_prais_${n}.svg)`;
$('.ikonka_pryas').css('background-image', url);
}, function() {
// убрали мышь с элемента
$('.ikonka_pryas').css('background-image', '');
});
});
</script>
</head>
<body>
<div class="blok">
<div class="tekst">
<a href="#" class="ssilka_prays">ПРАЙС ЛИСТ</a>
</div>
<div class="ikonka ikonka_pryas">
</div>
</div>
</body>
</html>
|
|
19.11.2021, 16:08
|
|
Профессор
|
|
Регистрация: 03.02.2020
Сообщений: 2,750
|
|
Кошмарный код.
Вот вы повесили на ssilka_prays события mouseover и mouseout.
Затем, если изменится размер опять вызовется ваша функция ssilka и на этот элемент опять будут вешаться те же события но с другими функциями. С другими, даже если будет выполняться то же условие, ведь эти функции заново определяются, и это будут уже совсем другие функции.
Но addEventListener не отменяет предыдущие обработчики, а добавляет.
Т.е в конце концов может случиться так, что у вас будет определено 100500 одинаковых функций и все они будут назначены, как обработчики событий, и будут выполняться последовательно при наступлении события.
Это я писал про код Сергей Ракипов
Последний раз редактировалось voraa, 19.11.2021 в 16:14.
|
|
19.11.2021, 16:11
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сообщение от Сергей Ракипов
|
И у меня дополнительный вопрос а почему иногда иконка мигает,
|
попробовал добавить предзагрузку картинок, может частично пропадёт мигание, если нет то к специалистам по css.
|
|
20.11.2021, 07:05
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
рони,
Как всегда огромное спасибо !
|
|
20.11.2021, 07:05
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
voraa,
А как правильно нужно было сделать ?
|
|
20.11.2021, 07:06
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
ksa,
Спасибо вот это полезно
|
|
20.11.2021, 07:09
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
рони,
А вот еще такой вопрос. Это лучше сделать в модельный файл и подгружать его или вот так куском кода на каждую страницу
??
|
|
20.11.2021, 07:34
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Сергей Ракипов,
делать отдельный модуль, думаю нецелесообразно,
но если написать более универсальный код, для таких пар, тогда возможно.
|
|
20.11.2021, 08:14
|
Профессор
|
|
Регистрация: 01.06.2010
Сообщений: 668
|
|
Попробовал со спрайтами и понял что это нужная тема которую стоит использовать. И моего понимание хватило не на много. Можете дополнить код что бы он работал так как же как и код выше, только со сдвигом, я не много его написал. Но ни понимаю синтаксиса когда нужно добавлять условия на разрешение 640 px
<!DOCTYPE html>
<html lang="ru_RU">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<style>
body{
background: #000;
font-family: Verdana;
font-size: 16px;
}
.blok {
margin: 40px 40px 40px 40px;
display: flex;
align-items: center;
}
.tekst {
margin: 0px 20px 0px 0px;
}
.tekst a {
color:#22AD1D;
}
.tekst a:hover {
color:#fff;
}
.ikonka {
width: 94px;
height: 94px;
}
.ikonka_pryas {
background-image: url(http://rakipov.ru/files/prays_94.png);
background-repeat: no-repeat;
background-position:0px ;
}
.ikonka_pryas:hover {
background-image: url(http://rakipov.ru/files/prays_94.png);
background-repeat: no-repeat;
background-position:-94px;
}
@media (max-width:640px){
.ikonka {
width: 64px;
height: 64px;
}
.ikonka_pryas {
background-image: url(http://rakipov.ru/files/prays_64.png);
background-repeat: no-repeat;
background-position:0px;
}
.ikonka_pryas:hover {
background-image: url(http://rakipov.ru/files/prays_64.png);
background-repeat: no-repeat;
background-position:-64px;
}
}
</style>
</head>
<body>
<div class="blok">
<div class="tekst">
<a href="#" class="ssilka_prays">ПРАЙС ЛИСТ</a>
</div>
<div class="ikonka ikonka_pryas">
</div>
</div>
<script>
jQuery(document).ready(function($) {
$('.ssilka_prays').hover(function() {
// навели мышь на элемент
$('.ikonka_pryas').css('background-position', '-94px');
}, function() {
// убрали мышь с элемента
$('.ikonka_pryas').css('background-position', '0px');
});
});
</script>
</body>
</html>
|
|
|
|