Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Плавное появление картинки при наведении на ссылку (https://javascript.ru/forum/jquery/73730-plavnoe-poyavlenie-kartinki-pri-navedenii-na-ssylku.html)

Lord_Jesus_ 10.05.2018 15:49

Плавное появление картинки при наведении на ссылку
 
Код:

var imgs = new Array("img1.png", "img2.png", "img3.png");
function sh_img(a) {
 
 
    var obj = document.getElementById("img");
        obj.src = imgs[a];
 
 
  }

<nav>
    <a href="ссылка.php"  onMouseOver="sh_img(1)" onMouseOut="sh_img(0);">текст</a>
        <a href="ссылка2.php"  onMouseOver="sh_img(2)" onMouseOut="sh_img(0);">текст2</a>
    
  </nav>
  <div>
  <img src=""img1.png" id="img">
  </div>



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

Пробовал сделать так...

Код:

var imgs = new Array("img1.png", "img2.png", "img3.png");
function sh_img(a) {
 
      $('#img').animate({'opacity': 0}, 500).hide();
    var obj = document.getElementById("img");
        obj.src = imgs[a];
 
      $('#img').show().animate({'opacity': 1}, 500);
  }

это конечно неправильно,и работает не корректно и говорит о том что у меня нехватка знаний, подскажите пожалуйста как нужно правильно все это реализовать,,,

j0hnik 10.05.2018 15:54

http://api.jquery.com/category/effects/fading/
fadeIn / fadeOut не пробовали?

Lord_Jesus_ 10.05.2018 16:00

j0hnik,
А не могли бы вы мне помочь, как правильно и корректно применить это в своем коде?? если вас не затруднит,,,

j0hnik 10.05.2018 16:15

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<body>

	<a href="ссылка.php"  onMouseOver="sh_img(1)" onMouseOut="sh_img(0);">текст</a>
	<a href="ссылка2.php"  onMouseOver="sh_img(2)" onMouseOut="sh_img(0);">текст</a>
	<img src="img0.png" id="img">
	<script>
		function sh_img(a){
			$("#img").fadeOut( "slow", function() {
				$("#img").prop('src', 'img'+a+'.jpg');
				$("#img").fadeIn("slow");
			});
		}

	</script>
</body>
</html>


img0 - это изображение по умолчанию.

laimas 10.05.2018 16:20

CSS3 - transition

Lord_Jesus_ 10.05.2018 16:35

j0hnik,
Я немного переделал, вы конечно я так хорошо владеете этим языком по крайней мере знаете побольше намного чем я...

правильно ли будет если я немного изменил ваш код и сделал так...???

var imgs = new Array("img1.png", "img2.png", "img3.png");
function sh_img(a){
			$("#img").fadeOut( "slow", function() {
				$("#img").prop('src',  imgs[a]);
				$("#img").fadeIn("slow");
			});
		}



все работает отлично, спасибо огромное за помощь,
А можно ли изменить интервал,чтобы появление и затухание происходило быстрее?

j0hnik 10.05.2018 16:37

Lord_Jesus_,
вместо "slow" можете указать число в мс
например 1000 - эта секунда.

Lord_Jesus_ 10.05.2018 16:38

j0hnik,
Спасибо за помощь

рони 10.05.2018 16:48

j0hnik,
а если быстро поводить курсором по ссылкам?

Lord_Jesus_ 10.05.2018 16:51

рони,
эффект был будто картинка зависала
но после того как я понизил время интервала появление как посоветовал мне "j0hnik", все прорисовываеться плавно

рони 10.05.2018 16:53

Lord_Jesus_,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .img {
      width: 300px;
      height: 200px;
      background-repeat: no-repeat;
      background-size: cover;
      background-image: url(http://img.funtema.ru/10112015/les/5.jpg);
      transition: .8s;
  }
  .img img{
      opacity: 0;
      width: 100%;
      height: 100%;
      transition: opacity .8s;
  }
  .img.show img{
      opacity: 1;
  }
  nav a{
      font-size: 42px;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
  var src = ["https://tvoidvor.com/wp-content/uploads/TelegramDesktop-min.jpg", "https://poster.nicefon.ru/2016_06/13/800x450/33349860e2e2ea69df6fc.jpg"];
  var div = $(".img");
  var img = $("img", div)[0];
  $("nav a").each(function(i, el) {
    $(el).mouseleave(function() {
      div.removeClass("show");
    }).mouseenter(function() {
      img.src = src[i];
      div.addClass("show");
     });
  });
});
  </script>
</head>

<body>
<nav>
    <a href="ссылка.php">текст</a>
    <a href="ссылка2.php">текст2</a>
</nav>
<div class="img">
  <img>
</div>
</body>
</html>

рони 10.05.2018 16:56

Цитата:

Сообщение от Lord_Jesus_
эффект был будто картинка зависала

надо останавливать одну анимацию, прежде чем запускать другую.
var imgs = new Array("img1.png", "img2.png", "img3.png");
function sh_img(a){
			$("#img")*!*.stop(true,true)*/!*.fadeOut( "slow", function() {
				$("#img").prop('src',  imgs[a]);
				$("#img").fadeIn("slow");
			});
		}

laimas 10.05.2018 16:58

рони,
это неудобно будет задавать картинки через JS, может лучше использовать http://htmlbook.ru/css/attr ?

Lord_Jesus_ 10.05.2018 16:58

рони,
Спасибо Вам, приму за внимание

рони 10.05.2018 17:03

Цитата:

Сообщение от laimas
может лучше использовать

тогда уж лучше data - src

рони 10.05.2018 17:05

Плавное появление картинки
 
laimas,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .img {
      width: 300px;
      height: 200px;
      background-repeat: no-repeat;
      background-size: cover;
      background-image: url(http://img.funtema.ru/10112015/les/5.jpg);
      transition: .8s;
  }
  .img img{
      opacity: 0;
      width: 100%;
      height: 100%;
      transition: opacity .8s;
  }
  .img.show img{
      opacity: 1;
  }
  nav a{
      font-size: 42px;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script>
$(function() {
  var div = $(".img");
  var img = $("img", div)[0];
  $("nav a").each(function(i, el) {
    var src = $(el).data("src");
    $(el).mouseleave(function() {
      div.removeClass("show");
    }).mouseenter(function() {
      img.src = src;
      div.addClass("show");
     });
  });
});
  </script>
</head>

<body>
<nav>
    <a href="ссылка.php" data-src="https://tvoidvor.com/wp-content/uploads/TelegramDesktop-min.jpg">текст</a>
    <a href="ссылка2.php" data-src="https://poster.nicefon.ru/2016_06/13/800x450/33349860e2e2ea69df6fc.jpg">текст2</a>
</nav>
<div class="img">
  <img>
</div>
</body>
</html>

laimas 10.05.2018 17:08

А чисто на CSS никак? )

рони 10.05.2018 17:15

laimas,
я незнаю таких селекторов, условно nav a:hover ~ nav + div

laimas 10.05.2018 17:25

Цитата:

Сообщение от рони
я незнаю таких селекторов

А :after нельзя?

рони 10.05.2018 17:42

Цитата:

Сообщение от laimas
А :after нельзя?

проблему это не решит, нет селекторов "вверх по дереву" есть только "вниз", нельзя наведя на ссылку в одном блоке, управлять картинкой в другом блоке, через css.

рони 10.05.2018 17:45

laimas,
нет
nav a:hover => parent + div

laimas 10.05.2018 17:53

Верстка не религия, можно и изменить. :)

Конечно, если не отходить "от", тогда да.

Malleys 11.05.2018 21:15

Как вариант без <img>

<!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;
			grid-template-columns: 20rem;
			align-content: end;
			justify-content: end;
			height: 100vh;
			overflow: auto;
		}
			
		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;
/*			order: 1;*/
		}
			
		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>


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