Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   Изображение при наведении мыши заменяется другой и увеличивается (https://javascript.ru/forum/xhtml-html-css/39081-izobrazhenie-pri-navedenii-myshi-zamenyaetsya-drugojj-i-uvelichivaetsya.html)

Aleksanderj 14.06.2013 17:29

Изображение при наведении мыши заменяется другой и увеличивается
 
Здравствуйте, помогите, пожалуйста,создать правильный скрипт. Нужно чтобы картинка при наведении заменилась другой, т.е. первая исчезает, а вторая в этот момент появляется и увеличивается на том же месте, как на сайте мегафона внизу есть подобных 3 изображения. Я смог только css от туда взять, а как дальше быть не знаю. Может есть какой-нибудь плагин jquery, javascript или с css надо поработать или что то еще? Вот что я от туда взял:
Код:

.shadow-box {
    position: relative;
    float: left;
    margin: 10px
}
.dt-news .shadow-box {
    margin: 15px 25px 10px 5px
}
.dt-actions .shadow-box {
    margin: 15px 25px 10px 5px
}
.shadow-box * {
    outline: 0
}
.shadow-box .sh-in {
    display: block;
    position: relative;
    z-index: 10;
    top: -4px;
    left: -4px;
    margin: 0 -8px -8px 0
}
.shadow-box .l {
    width: 10px;
    position: absolute;
    top: 0;
    height: 100%;
    z-index: 20
}
.shadow-box .r {
    width: 10px;
    position: absolute;
    top: 0;
    height: 100%;
    z-index: 20
}
.shadow-box .l {
    background: url('') 0 0 repeat-y transparent;
    left: -10px
}
.shadow-box .r {
    background: url('') 100% 0 repeat-y transparent;
    right: -10px
}
.shadow-box .sh-t {
    position: absolute;
    height: 10px;
    z-index: 20;
    line-height: 0;
    font-size: 0
}
.shadow-box .sh-tr {
    position: absolute;
    height: 10px;
    z-index: 20;
    line-height: 0;
    font-size: 0
}
.shadow-box .sh-b {
    position: absolute;
    height: 10px;
    z-index: 20;
    line-height: 0;
    font-size: 0
}
.shadow-box .sh-br {
    position: absolute;
    height: 10px;
    z-index: 20;
    line-height: 0;
    font-size: 0
}
.shadow-box .sh-t {
    width: 100%;
    top: -10px;
    left: -10px;
    background: url('') 0 0 no-repeat transparent
}
.shadow-box .sh-tr {
    width: 20px;
    top: -10px;
    right: -10px;
    background: url('') 100% 0 no-repeat transparent
}
.shadow-box .sh-b {
    width: 100%;
    top: 100%;
    left: -10px;
    background: url('') 0 0 no-repeat transparent
}
.shadow-box .sh-br {
    width: 20px;
    top: 100%;
    right: -10px;
    background: url('') 100% 0 no-repeat transparent
}


ruslan_mart 14.06.2013 18:10

.img {
   background:url('первое_изображение.jpg');
   height: 300px;
   width: 300px;
}
.img:hover {
   background:url('второе_изображение.jpg');
   height: 500px;
   width: 500px;
}

<div class="img"></div>

Aleksanderj 15.06.2013 02:39

Это обычный и не красивый переход. Нужно плавное увеличение и первый плавно исчезает.
Если брать по отдельности, есть плавный переход
.image-block {
   display: inline-block;
   padding: 0;
   margin: 0;
   background-position: center center;
   background-repeat: no-repeat;
}

.image-up, .image-down {
   border: 0;
   margin: 0;
   padding: 0;
}

.image-up {
   opacity: 1.0;
   filter: alpha(opacity=99); /* IE */
   display: block;
   position: absolute;
   z-index: 100;
   transition-duration: 0.96s;
   -webkit-transition-duration: 0.96s;
   -moz-transition-duration: 0.96s;
   -o-transition-duration: 0.96s;
   -ms-transition-duration:  0.96s; /* IE9+ */
}

.image-up:hover {
   opacity: 0.00;
   filter: alpha(opacity=00); /* IE */
}

<div class="image-block">
<img class="image-up" src="../images/первое_изображение.jpg" />
<img class="image-down" src="../images/второе_изображение.jpg />
</div>

а также плавное увеличение:
#container{
text-align: center;
position: absolute;
left: 240px;
margin-top: 150px;
width: 790px;
}
.img{
position: fixed;
z-index: 0;
}
.end{
margin-right: 0;
}
.clear{
clear: both;
}
.img a img{
position: relative;
border: 0 solid #fff;
}

$(document).ready(function() {
        var cont_left = $("#container").position().left;
        $("a img").hover(function() {
            // приближение
            $(this).parent().parent().css("z-index", 1);
            $(this).animate({
               height: "250",
               width: "250",
               left: "-=50",
               top: "-=50"
            }, "fast");
        }, function() {
            // отдаление
            $(this).parent().parent().css("z-index", 0);
            $(this).animate({
                height: "150",
                width: "150",
                left: "+=50",
                top: "+=50"
            }, "fast");
        });<p></p>

        $(".img").each(function(index) {
            var left = (index * 160) + cont_left;
            $(this).css("left", left + "px");
        });
    });


всё делается только по отдельности, а как совместить, чтобы происходило и плавная смена и плавное увеличение вместе?

sphere89 15.06.2013 02:52

Делал подобное за 20 минут с помощью двух вызовов transitions, плавная смена с помощью transform, другая с помощью width, margin, left - надо просто отдельно указывать transitions на эти свойства. Почитать

Aleksanderj 15.06.2013 03:27

А пример написания можно увидеть?:)

sphere89 15.06.2013 12:43

http://jsfiddle.net/CCkr4/3/ - Не думал, что будет мерцание, но я думаю его можно убрать. http://jsfiddle.net/CCkr4/4/ :)

Aleksanderj 15.06.2013 13:28

Цитата:

Сообщение от sphere89 (Сообщение 256504)
http://jsfiddle.net/CCkr4/3/ - Не думал, что будет мерцание, но я думаю его можно убрать. http://jsfiddle.net/CCkr4/4/ :)

Смысл то в том, что изображение увеличенное в css теряет качество, вот и надо подставить второе изображение так, чтобы оно было размером больше чем первое. А может даже не само изображение надо увеличить, а рамку вокруг, т.е. первоначально показать первое изображение, а при наведении мыши второе не полное, где постепенно будет расширяться рамка.

Zibba 16.06.2013 23:52

Цитата:

Сообщение от Aleksanderj (Сообщение 256508)
Смысл то в том, что изображение увеличенное в css теряет качество, вот и надо подставить второе изображение так, чтобы оно было размером больше чем первое. А может даже не само изображение надо увеличить, а рамку вокруг, т.е. первоначально показать первое изображение, а при наведении мыши второе не полное, где постепенно будет расширяться рамка.

Что мешает взять изображение больше (по размерам, как второе) и просто уменьшить для начального?
http://jsfiddle.net/kazabr/j2mjN/3/embedded/result/

Aleksanderj 17.06.2013 09:26

Цитата:

Сообщение от Zibba (Сообщение 256712)
Что мешает взять изображение больше (по размерам, как второе) и просто уменьшить для начального?
http://jsfiddle.net/kazabr/j2mjN/3/embedded/result/

Мешает то, что нужно два изображения вставить...

ruslan_mart 17.06.2013 16:48

Цитата:

Сообщение от Aleksanderj
Это обычный и не красивый переход. Нужно плавное увеличение и первый плавно исчезает.
Если брать по отдельности, есть плавный переход

.img {
   background:url('первое_изображение.jpg');
   height: 300px;
   transition: all 0.5s;
   width: 300px;
}
.img:hover {
   background:url('второе_изображение.jpg');
   height: 500px;
   margin: -100px 0% 0% -100px;
   position: absolute;
   width: 500px;
}

<div class="img"></div>


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