Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.10.2015, 18:18
Аспирант
Отправить личное сообщение для optron Посмотреть профиль Найти все сообщения от optron
 
Регистрация: 03.12.2013
Сообщений: 35

Изменения высоты блока при наведении курсора
Всем добрый вечер. Помогите решить проблему с дерганьем блоков при наведении мыши.
<div id="popup">
     <div class="on">Блок #1</div>
     <div class="on">Блок #2</div>
     <div class="on">Блок #3</div>
     <div class="on">Блок #4</div>
     <div class="on">Блок #5</div>
     <div class="on">Блок #6</div>
     <div class="on">Блок #7</div>
     <div class="on">Блок #8</div>
     <div class="on">Блок #9</div>
     <div class="on">Блок #10</div>
</div>

var speed=150,
    originalHeight=30,
    hoverHeight=50;

$(".on").hover(function(){
  $(this).stop().animate({height:hoverHeight},speed);
},function(){
	$(this).stop().animate({height:originalHeight},speed);

	
	})


Рабочий пример можно посмотреть здесь - https://jsfiddle.net/7pgeodrm/
Если провести медленно курсором через все блоки, то работает более менее нормально. Но если чуть быстрее то начинает дергать все блоки. Как это можно исправить или чуть приглушить?
Ответить с цитированием
  #2 (permalink)  
Старый 28.10.2015, 20:07
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Так?

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        #popup {
            width: 200px;
            border: 1px solid #999;
        }
        .on {
            border-bottom: 1px solid #999;
            height: 30px;
        }
    </style>
</head>
<body>
<div id="popup">
    <div class="on">Блок #1</div>
    <div class="on">Блок #2</div>
    <div class="on">Блок #3</div>
    <div class="on">Блок #4</div>
    <div class="on">Блок #5</div>
    <div class="on">Блок #6</div>
    <div class="on">Блок #7</div>
    <div class="on">Блок #8</div>
    <div class="on">Блок #9</div>
    <div class="on">Блок #10</div>
</div>

<script type="text/javascript" src="https://code.jquery.com/jquery-latest.js"></script>

<script type="text/javascript">
    var speed = 150,
        originalHeight = 30,
        hoverHeight = 50,
        sensitivity = 0.2,
        mouseSpeed;

    function hover(event) {
        var pX = event.pageX,
            pY = event.pageY,
            pTime = Date.now();

        $(this).mousemove(function(event) {
            var cX = event.pageX,
                cY = event.pageY,
                cTime = Date.now();

            if (pTime == cTime) return;

            mouseSpeed = Math.sqrt( Math.pow(pX - cX, 2) + Math.pow(pY - cY, 2) ) / (cTime - pTime);
        });
        
        if (!mouseSpeed || mouseSpeed < sensitivity)
            $(this).stop().animate({ height: hoverHeight }, speed);
    }

    function out() {
        $(this).stop().animate({ height: originalHeight }, speed);
    }

    $(".on").hover(hover, out);
</script>
</body>
</html>

Последний раз редактировалось Decode, 28.10.2015 в 20:46.
Ответить с цитированием
  #3 (permalink)  
Старый 28.10.2015, 22:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

optron,
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        #popup {
            width: 200px;
            border: 1px solid #999;
        }
        .on {
            border-bottom: 1px solid #999;
            height: 30px;
        }
    </style>
</head>
<body>
<div id="popup">
    <div class="on">Блок #1</div>
    <div class="on">Блок #2</div>
    <div class="on">Блок #3</div>
    <div class="on">Блок #4</div>
    <div class="on">Блок #5</div>
    <div class="on">Блок #6</div>
    <div class="on">Блок #7</div>
    <div class="on">Блок #8</div>
    <div class="on">Блок #9</div>
    <div class="on">Блок #10</div>
</div>

<script type="text/javascript" src="https://code.jquery.com/jquery-latest.js"></script>

<script type="text/javascript">
    var speedto = 600,speedout = 300,
        originalHeight = 30,
        hoverHeight = 50,
        pause = 350;

    function to() {
        $(this).stop().delay(pause).animate({ height: hoverHeight }, speedto);
    }

    function out() {
        $(this).stop(true,true).animate({ height: originalHeight }, speedout);
    }

    $(".on").on({mouseenter : to, mouseleave : out});
</script>
</body>
</html>
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена bg-image при наведении курсора dmitry_martt Элементы интерфейса 6 11.01.2015 14:57
Как плавно пролистать страницу вправо при наведении курсора в правую сторону? Orkhan Элементы интерфейса 2 11.04.2013 12:14
Помогите с небольшим эффектом на JS. При наведении курсора.. bayanruby Элементы интерфейса 10 27.05.2012 02:44
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06
изменения рисунка при наведении курсора Kenan Bek Events/DOM/Window 24 19.12.2010 20:48