Заставьте CSS зависать в области просмотра - PullRequest
9 голосов
/ 29 января 2012

У меня есть настройка наведения мыши с помощью CSS.Однако изображения при наведении не относятся к области просмотра и, следовательно, в конечном итоге отображаются за ее пределами.Я планировал просто создать новые классы с указанием смещения в зависимости от расположения изображения в моем дизайне, но, поскольку я не могу контролировать разрешение, используемое пользователем, я подумал, что должен быть какой-то способ заставить указатель мыши отображаться в пределахокно просмотра.Кто-нибудь есть идеи о том, как я могу это сделать?

У меня есть следующий CSS:

.thumbnail:hover {
    background-color: transparent;
    z-index: 50;
}

.thumbnail span { 
    position: absolute;
    padding: 5px;
    left: -1000px;
    border: 1px dashed gray;
    visibility: hidden;
    color: black;
    text-decoration: none;
}

.thumbnail span img { 
    border-width: 0;
    padding: 2px;
}

.thumbnail:hover span { 
    visibility: visible;
    top: 0;
    left: 70px; 
}

Чтобы сопоставить следующие эскизы с парением:

<li>
    <a href="http://www.yahoo.com" class="img thumbnail">
        <img src="1_s.jpg" />
        <span><img src="1_b.jpg" /></span>
    </a>
</li>
<li>
    <a href="http://www.google.com" class="img thumbnail">
        <img src="2_s.jpg" />
        <span><img src="2_b.jpg" /></span>
    </a>
</li>

У меня есть пример страницы, на которой показано поведение:

http://estorkdelivery.com/example/example2.html

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

Спасибо!

Обновление 2/22/2012 Я проверил ответ № 1 ниже, но в нем появились новые проблемы, такие как необходимость изменения прозрачности и необходимость всегда отображать изображение при наведенииверхний левый угол изображения - обе проблемы я не видел, как можно было изменить параметры скрипта.У кого-нибудь есть другие предложения или способ изменить сценарий в ответе № 1?Кроме того, я должен добавить то, что я ищу, так как больше конечного результата - это стилизация при наведении изображений на istockphoto.com, где изображения всегда появляются в одном и том же месте слева или справа от изображений, над которыми они парят, а нев зависимости от положения мыши при наведении курсора на изображение.

Ответы [ 6 ]

7 голосов
/ 25 февраля 2012

Я создал специальный плагин для вас!

http://jsfiddle.net/adaz/tAECz/

Ну, это довольно просто, но я думаю, что оно соответствует вашим критериям. Вы можете активировать его двумя способами:

1) Если вас не затруднит создание миниатюр для каждого изображения, вы можете просто перечислить ваши изображения следующим образом:

<ul id="istockWannabe">
    <li>
        <img src="imgURL" width="600" height="400" title="Description" />
    </li>
    <li>
        <img src="imgURL" width="600" height="400" title="Description" />
    </li>
...
</ul>

2) Если вы действительно хотите создавать свои собственные эскизы, ваш HTML должен выглядеть следующим образом:

<ul id="istockWannabe">
    <li>
        <span rel="largeImgURL"><img src="thumbURL" /><span class="iStockWannabe_description">Image description</span></span>
    </li>
...
</ul>

В любом случае, вы должны включить jQuery 1.7+ на свою страницу вместе с моим плагином.

Самое последнее, что вам нужно сделать, это активировать его, если вы выбираете первый вариант, вы можете просто включить на своей странице следующий код:

<script type="text/javascript">
    $(document).ready(function() {
        $("#istockWannabe").istockWannabe();
    });
</script>

Если вы выбираете второй вариант, вам нужно переопределить настройки по умолчанию, например:

<script type="text/javascript">
    $(document).ready(function() {
        $("#istockWannabe").istockWannabe({ createThumbs: false });
    });
</script>

Это больше похоже на прототип, поэтому он довольно ограничен с точки зрения функциональности, но вы можете установить некоторые параметры, такие как:
thumbMaxWidth: 100 thumbMaxHeight: 100 tooltipWidth: 200 tooltipHeight: 150 скорость перехода: 100

Если вам это нравится, я с удовольствием потрачу на него некоторое время и настрою его в соответствии с вашими потребностями!

3 голосов
/ 29 января 2012

Попробуйте jQuery Tooltip:

Вот пример по вашему запросу: http://jsfiddle.net/cadence96/3X2eZ/

DOCS http://docs.jquery.com/Plugins/Tooltip
http://jquery.bassistance.de/tooltip/demo/

Быстрые инструкции: 1) В загрузите css и скрипты:

<link href="http://jquery.bassistance.de/tooltip/jquery.tooltip.css" rel="stylesheet" type="text/css" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="http://jquery.bassistance.de/tooltip/jquery.tooltip.js" type="text/javascript"></script>

2) Все еще в поместите скрипт выполнения:

<script type="text/javascript">
            $(document).ready(function() {
                $(".your-div").tooltip({
                    track: true,
                    delay: 0,
                    showURL: false,
                    fade: 250,
                    bodyHandler: function() {
                        return $($(this).next().html());
                    },
                    showURL: false
                });
            });
        </script>

Класс '.my-div 'будет использоваться для отображения изображения с событием hover.Элемент div для '.my-div' должен содержать скрытые элементы, чтобы сделать их видимыми после зависания.

<ul>
    <li>
            <div class="my-div">
                <!-- Here comes the image with the hover event -->
            </div>
            <div class="active-hover">
                <!-- Here comes all the hidden elements I want to display while hovering the PREVIOUS div --><br />
                <!-- .active-hover must be set with display:none -->
            </div>
    </li>
</ul>

Вот и все!

2 голосов
/ 29 февраля 2012

ОБНОВЛЕНО:

посмотрите на исходный код

NB: это не учитывает случаи, когда всплывающее окно больше окна, в этом случае вы должны не только изменить позицию смещения, но вы должны изменить размер всплывающего окна, чтобы соответствовать окну .

1 голос
/ 29 февраля 2012

Это работает. Однако я решил проблему только для оси Y. Для горизонтального смещения оно должно быть одинаковым. Посмотрите, как это работает здесь . Я установил top точно на одну сторону изображения * -1, это выравнивает изображение внизу, если оно не подходит, измените это значение на любое, что вы хотите. Изображения очень большие, и этот скрипт не будет пуленепробиваемым. Вам нужно будет получить всю видимую область, чтобы убедиться, что она не срезается с другой стороны, когда вы перемещаете ее.

Разметка не изменилась, я просто добавил Jquery:

    $(document).ready(function(){

    $(".thumbnail > img").mouseenter(function(){

        var winSize = $(window).height();
        var winScrollTop = $(window).scrollTop();
        var linkOffset = $(this).offset().top - winScrollTop + 75; 
        // 75px is the height of the img. To get the offset().bottom . Get rid of the scroll too.
        var imgHover = $(this).next("span");
        var imgHoverHeight = parseInt(imgHover.children("img").attr("height"));
        var spaceDif = winSize-linkOffset;
        if(spaceDif < imgHoverHeight){
            imgHover.css("top", -imgHoverHeight+"px");
          //it doesn't have to be -imgHoverHeight. Tweak this value to get better results           
        }

    }); 

    $(".thumbnail > img").mouseout(function(){

        $("span").css("top", "0");

    });
});

Надеюсь, это помогло !!

1 голос
/ 25 февраля 2012

Я разработал скрипт, в js вы можете изменить ширину контейнера.

Вот скрипка: http://jsfiddle.net/cadence96/GgDqh/

ОБНОВЛЕНО, СЕЙЧАС работает в скрипке и более приемлемо.

0 голосов
/ 29 февраля 2012

Попробуйте это ... кажется сравнительно круто!

<html>
<head>
    <title>Hover Test</title>
    <style>
        li {margin-bottom: 100px;}
        .thumbnail{position: relative;z-index: 0;}
        .thumbnail:hover{background-color: transparent;z-index: 50;}
        .thumbnail div{ /*CSS for enlarged image*/position: absolute;padding: 5px;left: -1000px;border: 1px dashed gray;visibility: hidden;color: black;text-decoration: none;}
        .thumbnail div img{ /*CSS for enlarged image*/border-width: 0;padding: 2px;}
        .thumbnail:hover div{ /*CSS for enlarged image on hover*/visibility: visible;top: 0;left: 70px; /*position where enlarged image should offset horizontally */}
    </style>
</head>
<body>
    <li>
        <a href="http://www.yahoo.com" class="img thumbnail">
            <img src="1_s.jpg">
            <div><img src="1_b.jpg"></div>
        </a>
    </li>
    <li>
        <a href="http://www.google.com" class="img thumbnail">
            <img src="2_s.jpg">
            <div><img src="2_b.jpg"></div>
        </a>
    </li>
    <li>
        <a href="http://www.apple.com" class="img thumbnail">
            <img src="3_s.jpg">
            <div><img src="3_b.jpg"></div>
        </a>
    </li>
    <li>
        <a href="http://www.babycenter.com" class="img thumbnail">
            <img src="4_s.jpg">
            <div><img src="4_b.jpg"></div>
        </a>
    </li>
    <li>
        <a href="http://www.food.com" class="img thumbnail">
            <img src="5_s.jpg">
            <div><img src="5_b.jpg"></div>
        </a>
    </li>       
</body>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...