Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 09.03.2015, 12:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

snovapavel,
<!DOCTYPE HTML>

<html>

<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
   .w {
  display: block;
  width: 150px;
}

.container {
  margin: 0 0 50px 0;
  padding: 0;
  background-color: red;
  position: relative;
   overflow-x:  scroll;
  z-index: 9999;
}
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function() {
    $(".container").filter(function() {
        var scroll = 150 < this.scrollWidth;
        $(this).css("overflow-x", function(b, c) {
            return scroll ? "scroll" : "auto"
        });
        return scroll
    }).mouseover(function() {
        $(this).stop(true).animate({
            width: 600 < this.scrollWidth ? 600 : this.scrollWidth
        }, 200).css("overflow-x", "scroll")
    }).mouseleave(function() {
        $(this).stop(true,true).delay(900).queue(function() {
            $(this).animate({
                width: 150
            }, 200).dequeue().css("overflow-x", "scroll")
        })
    })
});
 </script>
</head>

<body>  <div class="w">

    <pre class="container">Просто длинный текст. Просто длинный текст. Просто длинный текст. Просто длинный текст.
Просто длинный текст. Просто длинный текст. Просто длинный текст. Просто длинный текст.

Просто длинный текст. Просто длинный текст. Просто длинный текст. Просто длинный текст.</pre>

    <pre class="container">Текст. Текст. Текст. Текст. Текст. Текст. Текст. Текст. Текст.

Текст. Текст. Текст. Текст. Текст.</pre>

    <pre class="container">Текст.</pre>

</div>
</body>

</html>

Последний раз редактировалось рони, 09.03.2015 в 15:47.
Ответить с цитированием
  #12 (permalink)  
Старый 09.03.2015, 12:17
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

laimas,

Большое спасибо, теперь всё работает как надо.

Вот код который получился:

$(document).ready(function() {

    var t;

    $('.container').hover(function() {

        clearTimeout(t);

        $(this).stop().animate({width: this.scrollWidth > 600 ? 600 : this.scrollWidth}, 200).css('overflow-x', 'auto');

		}, function() {

        t = setTimeout(function() {$('.container').animate({width: "150px"},{queue:false,duration:200}).css('overflow-x', 'auto');},

        500);

	});

});


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

Опытным путём удалось выяснить, что дело вот в этом отрезке кода:

}, function() {

        t = setTimeout(function() {$('.container').animate({width: "150px"},{queue:false,duration:200}).css('overflow-x', 'auto');},

        500);


подскажите как исправить.

Вот проект на jsfiddle http://jsfiddle.net/n995Lmdj/5/

Всем большое спасибо!
Ответить с цитированием
  #13 (permalink)  
Старый 09.03.2015, 12:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

snovapavel,
чем 11 пост не устраивает?
Ответить с цитированием
  #14 (permalink)  
Старый 09.03.2015, 12:35
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

рони,

Всё отлично, (немного опередили меня).

Осталась только одна маленькая проблема, - задержка перед скрытием блока половина секунды. Я прописал свойство .delay(500) вот сюда:

.mouseleave(function() {
        $(this).stop(true).delay(500).animate({
            width: 150
        }, 200).css("overflow-x", "scroll")


Но теперь, пропадает полоса прокрутки при сворачивании блока...

Простите меня бестолкового. Как это исправить?
Ответить с цитированием
  #15 (permalink)  
Старый 09.03.2015, 13:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

snovapavel,
смотрите пост 11 снова
Ответить с цитированием
  #16 (permalink)  
Старый 09.03.2015, 15:23
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

рони,

Дорогой друг!

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

Преимущества моего сниппета:

- Реагирует даже на мгновенный проход мышкой над блоком, даже независимо от того, в фокусе окно браузера или нет;
- При проходе над блоком - блок раскрывается полностью, отсчитывает секунду, и только потом закрывается. Если провести мышкой над блоком через 0.9 секунды, он опять отсчитает секунду и только потом закроется. Дёргаться он при этом не будет.
- Очень хорошо реагирует на мышь, ловит её проход над собой даже за доли секунды.
- Не болтается туда-сюда если быстро водить.

Недостатки моего сниппета:

- Раскрываются все блоки на странице сразу (это именно-то, что нужно было решить).
- Раскрывались все блоки на странице, независимо от наличия полосы прокрутки (вы это решили).

Мой сниппет:

$(document).ready(function() {

    var t;

    $('.container').hover(function() {

        clearTimeout(t);

        $('.container').animate({width: "200px"},{queue:false,duration:200}).css('overflow-x', 'auto');

		}, function() {

        t = setTimeout(function() {$('.container').animate({width: "150px"},{queue:false,duration:200}).css('overflow-x', 'auto');},

        500);

	});

});


Откуда я взял пример который доработал: ссылка

Я вас очень прошу, доработать именно его, так как хочется наконец сделать адекватное и удобное меню, работающее идеально.

Огромное спасибо за оказанную помощь!
Ответить с цитированием
  #17 (permalink)  
Старый 09.03.2015, 15:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

snovapavel,
посмотрите пост 11 и скажите что не так
Ответить с цитированием
  #18 (permalink)  
Старый 09.03.2015, 17:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Опытным путём удалось выяснить, что дело вот в этом отрезке кода:


Я писал, что перед запуском анимации текущего блока, если нужно, то можно остановить анимацию у всех блоков $('.container').stop(). Зачем вам таймер и hover? Зачем queue:false, если по умолчанию все назначенные анимации и не добавляются в очередь?
Ответить с цитированием
  #19 (permalink)  
Старый 10.03.2015, 12:23
Аспирант
Отправить личное сообщение для snovapavel Посмотреть профиль Найти все сообщения от snovapavel
 
Регистрация: 08.03.2015
Сообщений: 78

рони,

Дорогой друг, вы можете прикрутить сюда таймер, чтобы при наведении мышкой, всегда заново начинался отсчёт половины секунды до скрытия и блок не сворачивался? Тогда можно будет избавиться от скакания.

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

Спасибо вам за работу, друзья!
Ответить с цитированием
  #20 (permalink)  
Старый 10.03.2015, 13:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от snovapavel
Дорогой друг, вы можете прикрутить сюда таймер, чтобы при наведении мышкой, всегда заново начинался отсчёт половины секунды до скрытия и блок не сворачивался? Тогда можно будет избавиться от скакания.
не понимаю что у вас скачет в 11 посте
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен скрипт для счета времени с текущего момента Julius123 Javascript под браузер 9 05.11.2014 20:35
Нужен скрипт для Greasemonkey разворачивающий ссылки Ирина_Инина Firefox/Mozilla 7 18.09.2014 22:02
Нужен скрипт для работы через Google Script (Spreadsheets) Satmax Работа 0 13.08.2014 16:55
Each срабатывает только для одного элемента Александр222 Общие вопросы Javascript 1 04.08.2014 14:12
виджет, только сторона клиента (JS, JQUery, работа с датами, масштабирование) eugen35 Работа 4 31.07.2014 09:50