Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
vatrikovsky

Вертикальный скролл по mouseover

27.10.2010, 18:47. Показов 3564. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю вертикально скроллящееся меню по типу вот этого:
http://www.netpro.ru/?action=DABlank2 (откройте "Мы сделали")
, только на javaScript + jQuery

HTML:
HTML5
1
2
3
4
5
6
<div id="left_list">
  <p class="project_number"><a href="#">007</a></p>
  <p class="project_number"><a href="#">012</a></p>
  ...
  <p class="project_number"><a href="#">186</a></p>
</div>
javaScript:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
$(document).ready(function(){
 
    // При наведении на левый блок
    var winHeight = $(window).height();
    var margin = $('#left_list').height() - winHeight;
 
    // движение при попадании курсора в области
    $('#left_list').unbind('mouseover').mouseover(function(e){
        // top 1/3
        if (e.pageY < (winHeight / 3))
        {
            var speed = (winHeight / 6) / e.pageY;
            if (speed > 2) speed = 2;
            $('#direction').val('top');
        }
        // bottom 1/3
        if (e.pageY > 2 * (winHeight / 3))
        {
            var speed =  (e.pageY - ((2 / 3) * winHeight)) / (winHeight / 6) + 0.5;
            if (speed > 2) speed = 2;
            $('#direction').val('bottom');
        }
        $('#speed').val(speed);
        
        var direction = $('#direction').val();
        var speed = $('#speed').val();
        
        // bottom 1/3, list moves top
        if (direction == 'bottom')
        {
            if (parseInt($('#left_list').css('margin-top')) > (-1) * margin)
            {
                $('#left_list').animate({marginTop: '-=50px'}, (300 / speed));
                $('#int').val(parseInt($('#left_list').css('margin-top')));
            }
            else 
            {
                $('#left_list').animate({marginTop: '-' + margin + 'px'}, (300 / speed));
                $('#int').val(parseInt($('#left_list').css('margin-top'))); 
            }
        }
        // top 1/3, list moves bottom
        if (direction == 'top')
        {   
            if ((parseInt($('#left_list').css('margin-top'))) < 0)
            {
                $('#left_list').animate({marginTop: '+=50px'}, (300 / speed));
                $('#int').val(parseInt($('#left_list').css('margin-top'))); 
            }
            else
            {
                $('#left_list').animate({marginTop: '0px'}, (300 / speed));
                $('#int').val(parseInt($('#left_list').css('margin-top'))); 
            }
        }
        
        // стопим, если увели мышь в середину
        if (direction == 'none')
        {
            $('#left_list').stop();
        }
    });
 
    // остановка при выведении указателя за пределы
    $('#left_list').unbind('mouseout').mouseout(function(){
        $('#speed').val('0');
        $('#direction').val('none');
        $('#left_list').stop();
    });
});
Суть проблемы:
Во всем, кроме ФайрФокса, блок прокручивается именно при движении мыши, а при простое на месте тоже останавливается. Надо, естественно, чтобы везде просто при поднесении мыши к краю списка, он бы скроллился. Пробовал сделать через setInterval, но это страшно тормозит скрипт, нет ли очевидного и грамотного способа реализовать это?

Спасибо.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2010, 18:47
Ответы с готовыми решениями:

Вертикальный скролл слайдер
Доброго времени суток. Ребята, возникла не простая ситуация по задаче. Материалов для просмотра нет, опишу саму ситуацию. В JS я не...

Убрать вертикальный скролл в ie 6 7
Как убрать вертикальную полосу прокрутки в ie6,7? Только так что бы во всех браузерах она появилась, если контент по вертикали выйдет за...

ListView вертикальный скролл
Народ, подскажите в чем дело? На форме есть ListView, View = List, при заполнении включается горизонтальный скролл, как его убрать и...

2
28.10.2010, 19:27

Не по теме:

Я заинтересовался этой темой.
На досуге поковыряю...

0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
02.11.2010, 12:29
Тема действительно полезная. Пока ковырялся, узнал кое-что новое по jQuery.

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<style type="text/css">
 
#list_holder {
    height: 300px;
    width: 400px;
    overflow: hidden;
    border: solid 1px green;
}
 
</style>
 
<div id="list_holder"><div id="list"></div></div>
 
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
<!--//
 
    $(function() {
        
        var debug = [];
        
        // создаем список достаточной длины
        for (var i = 0; i < 100; i++)
            $('<div/>').html('Item ' + i).css('border', 'solid 1px red').appendTo($('#list'));
        
        // скорости (пиксели в секунду на каждый участок #list_holder)
        var speeds = [ 400, 200, 100, 50, 0, 0, 0, 0, -50, -100, -200, -400 ],
            speed,
            
            offset = $('#list').height() - $('#list_holder').height(),
            durations = [];
        
        // пересчет скоростей в продолжительность анимации
        for (var i in speeds) durations[i] = Math.round((offset / Math.abs(speeds[i])) * 1000);
        
        $('#list_holder').mousemove(function(e) {
            
            var y = e.pageY - $(this).offset().top;
            var s = Math.floor(y / ($(this).height() / speeds.length));
            
            // только если новая скорость отличается от старой
            if (speed != speeds[s]) {
                
                var list = $('#list').stop(),
                    mtop1 = parseInt(list.css('margin-top')),  // текущий офсет
                    mtop2 = (speeds[s] > 0 ? 0 : -offset),     // конечный офсет
                    time = Math.round(durations[s] * ((mtop2 == 0 ? -mtop1 : offset + mtop1) / $('#list').height()));
                    // время, скалькулированное для скроллинга оставшегося офсета
                    
                if ((speed = speeds[s]) != 0) list.animate( // анимируем только, если скорость не 0
                    { 'margin-top': mtop2 + 'px' },
                    time,
                    'linear'
                );
            }
            
        }).mouseleave(function() { // не mouseout()!!!
            
            $('#list').stop();
            speed = 0;
            
        });
    });
 
//-->
</script>
Этот вариант отладил и проверил в "большой четверке".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2010, 12:29
Помогаю со студенческими работами здесь

вертикальный скролл для div
Всем привет! Подскажите пожалуйста у меня несколько вопросов по скроллам. 1. Есть div в него динамически добавляется текст. Нужно...

Убрать вертикальный скролл в sListView
Доброго времени суток, Столкнулся с проблемой, нужно убрать Vertical Scroll у компонента sListView Данный компонент предоставляет Alpha...

Как убрать вертикальный скролл
Написал простецкую анимацию. В диве находиться текст и при расширении блока появляется вертикальный скролл. Можно ли убрать его и сделать...

Position: fixed залазит на вертикальный скролл
как сделать, чтобы блок со стрелкой не залазил на скролл, а прижимался к нему? http://view.maquetter.com/niuu67

скрытый вертикальный скролл через overflow-y
А можно как то сделать, что бы блок, со свойством overflow-y: scroll; max-height: 300px; начинал отображать вертикальный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru