Создать ответ 
Плавная перемотка контента на странице
Автор Сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #1
Плавная перемотка контента на странице
Здравствуйте, уважаемый администратор Smile !
Необходимо ваше профессиональное вмешательство.

Имеется страница map.html, где 3 меню (Страница 1, Страница 2, Страница 3) и каждая вкладка имеет разное содержимое и высота у всех страниц одинаковая, т.е. в моем примере высота 1 и 2 страницы равняется высоте 3 страницы, так как 3 страница имеет самый большой контент, а нужно чтобы при переходе по другой вкладке высота страницы была равна контенту этой страницы.

[Изображение: tid_347_rewind.gif]

Как видно из скрина, высота первой и второй страницы равняется высоте третьей страницы, а нужно, чтобы высота была для каждой страницы своя.

При клике на любую из страниц страница появляется плавно, так как подключаются два скрипта (scrollTo.js и slider.js).


.rar  script.rar (Размер: 4.79 Кб / Загрузок: 1)

и код html на странице выглядит так:
Код:
<div id="slider">
            
        <ul class="navigation">
            <li><a href="" class="selected" title="">Страница 1</a></li>
            <li><a href="" title="">Страница 2</a></li>
            <li><a class="last "href="" title="">Страница 3</a></li>
        </ul>
        
        <div class="scroll">
            <div class="content">
                
                <div class="panel">
                    <ul>
                        <li><a href="#">Страница 1</a></li>
                        <li><a href="#">Страница 1</a></li>
                    </ul>
                   </div>
                
                <div class="panel">
                    <ul>
                        <li><a href="#">Страница 2</a></li>
                        <li><a href="#">Страница 2</a></li>
                        <li><a href="#">Страница 2</a></li>
                        <li><a href="#">Страница 2</a></li>
                    </ul>              
                </div>
                    
                <div class="panel">
                    <ul>
                        <li><a href="#">Страница 3</a></li>
                        <li><a href="#">Страница 3</a></li>
                        <li><a href="#">Страница 3</a></li>
                        <li><a href="#">Страница 3</a></li>
                        <li><a href="#">Страница 3</a></li>
                        <li><a href="#">Страница 3</a></li>
                    </ul>
                   </div>
                    
            </div>
        </div> <!-- content ends  -->
    </div> <!-- slider ends -->

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

С уважением и заранее благодарен Yes
(Последний раз сообщение было отредактировано 23.11.2015 в 16:50:41, отредактировал пользователь ale10ey.)
23.11.2015 16:48:29
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #2
RE: Плавная перемотка контента на странице
Что-то скопировал HTML код, подключил два прилагаемых скрипта и библиотеку jQuery - и ничего не работает (возможно, из-за отсутствия CSS).

Проверьте на всякий случай предоставленный код, а так же выложите CSS код.
23.11.2015 22:30:04
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #3
RE: Плавная перемотка контента на странице
(23.11.2015 22:30:04)Admin писал(а):  Что-то скопировал HTML код, подключил два прилагаемых скрипта и библиотеку jQuery - и ничего не работает (возможно, из-за отсутствия CSS).

Проверьте на всякий случай предоставленный код, а так же выложите CSS код.

Здравствуйте, забыл добавить библиотеку jQuery v1.3.2, да и css стили Pardon.

В архиве три js файла (scrollTo, slider, jquery) и страница sitemap.html, где прописаны стили.


.rar  scrollTo.rar (Размер: 24.34 Кб / Загрузок: 1)

На скрине сейчас так (не стал включать в архив все стили css, чтобы не было лишнего кода).

[Изображение: tid_347_rewind_2.gif]
23.11.2015 23:32:41
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #4
RE: Плавная перемотка контента на странице
Что-то сначала перемудрил, потому так долго и не отвечал. Big Grin

Добавьте в slider.js перед строчками:
Код:
// handle nav selection
function selectNav() {

Вот такой небольшой код:
Код:
heights=[];
$('#slider .content > div').each(function(indx){heights.push($(this).height());});
$('#slider .navigation').find('a').click( function(e){
    $('.scroll').height(heights[$('#slider .navigation').find('a').index(e.target)]);
});

Возможно, можно сделать еще проще, но что-то лень Tired
25.11.2015 23:04:27
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #5
RE: Плавная перемотка контента на странице
Спасибо Ok, высота меняется, правда для первых двух вкладок одинаковая высота, а для третьей вкладки (страница 3) немного меньше (около 10~15px), пробую пока средствами css сделать, чтобы от контента на странице были одинаковые отступы снизу, пока получается как-то коряво, но разберемся.
Кстати пробовал, "уменьшить" ваш код, но не вышло, хотя было интересно можно ли реализовать как-нибудь проще.

Благодарен за помощь .
27.11.2015 01:34:28
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #6
RE: Плавная перемотка контента на странице
Доброе время суток, есть вопрос касательно данной темы.

1. Есть на странице вкладки Страница 1, Страница 2, Страница 3, при клике на ссылку срабатывает скрипт slider.js и происходит плавная прокрутка контента.

[Изображение: tid_347_html_img.png]

На изображении имеются ссылки Страница 1, Страница 2, Страница 3 вверху и внизу, так вот при клике на любую из верхних ссылок все работает корректно, т.е. если кликнуть на ссылку Страница 2, то появится другой контент и Страница 2 станет активной, что логично. На изображении ниже:

[Изображение: tid_347_html_page 2.png]

видно, что страница 2 после клика по верхней вкладке активна и контент отображается согласно странице, а вот нижняя вкладка без изменений, т.е. нужно чтобы по клику верхней или нижней вкладки контент появлялся согласно данной вкладке и были активны как верхняя, так и нижняя вкладки, что логично.

Если кликнуть по нижней вкладке Страница 2, то вкладка становится активной, но контент появляется для Страницы 3

[Изображение: tid_347_html_page 2_bottom.png]

Если имеются только верхние вкладки, то работает все правильно, а вот при добавлении нижних вкладок вот такой косяк... + не работает высота для конкретной страницы с разным по высоте контентом, т.е. высота страницы 1 = высота страницы 2 = высота страницы 3.

Для верхних вкладок все работает нормально, так как в скрипте добавлены строчки, чтобы высота равнялась высоте конкретного контента.

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

2. html код:

Код:
<div id="slider">
            
        <ul class="nav">
            <li><a href="#" class="selected">Страница 1</a></li>
            <li><a href="#">Страница 2</a></li>
            <li><a class="last "href="#">Страница 3</a></li>
        </ul>
        
        <div class="scroll">
            <div class="content">
   >
                <div class="panel">
                
                    <h2>Страница 1</h2>                
                     <ol> <!-- page 1 -->
                        <li><a href="">Страница 1</a></li>
                        <li><a href="">Страница 1</a></li>
                        <li><a href="">Страница 1</a></li>
                        <li><a href="">Страница 1</a></li>
                        <li><a href="">Страница 1</a></li>
                        <li><a href="">Страница 1</a></li>
                        <li><a href="">Страница 1</a></li>
                     </ol>
                </div>
                
              <div class="panel">
                
                    <h2>Страница 2</h2>                
                    <ol> <!-- page 1 -->
                        <li><a href="">Страница 2</a></li>
                        <li><a href="">Страница 2</a></li>
                        <li><a href="">Страница 2</a></li>
                        <li><a href="">Страница 2</a></li>
                        <li><a href="">Страница 2</a></li>
                        <li><a href="">Страница 2</a></li>
                        <li><a href="">Страница 2</a></li>
                     </ol>
                </div>

                <div class="panel">
                
                    <h2>Страница 3</h2>
                    <ul> <!-- page 1 -->
                        <li><a href="">Страница 3</a></li>
                        <li><a href="">Страница 3</a></li>
                        <li><a href="">Страница 3</a></li>
                        <li><a href="">Страница 3</a></li>
                        <li><a href="">Страница 3</a></li>
                        <li><a href="">Страница 3</a></li>
                        <li><a href="">Страница 3</a></li>
                     </ul>
                   </div>
                    
            </div> <!-- content ends  -->
        </div> <!-- scroll ends  -->
        
        <ul class="nav">
            <li><a href="#" class="selected">Страница 1</a></li>
            <li><a href="#">Страница 2</a></li>
            <li><a class="last "href="#">Страница 3</a></li>
        </ul>
    
    </div> <!-- slider ends -->

3. И сам скрипт slider.js:

Код:
$(document).ready(function () {

    var $panels = $('#slider .content > div');
    var $container = $('#slider .content');

    // if false, we'll float all the panels left and fix the width
    var horizontal = true;

    // float the panels left if we're going horizontal
    if (horizontal) {
        $panels.css({
            'float' : 'left',
            'position' : 'relative' // IE fix to ensure overflow is hidden
        });

        // calculate a new width for the container (so it holds all panels)
        $container.css('width', $panels[0].offsetWidth * $panels.length);
    }

    var $scroll = $('#slider .scroll').css('overflow', 'hidden');

    // apply left + right buttons
    $scroll
        .before('')
        .after('');
        
    // height of nav selection
    heights=[];
        $('#slider .content > div').each(function(index){heights.push($(this).height());});
        $('#slider .nav').find('a').click( function(e){
        $('.scroll').height(heights[$('#slider .nav').find('a').index(e.target)]);
    });

    // handle nav selection
    function selectNav() {
        $(this)
            .parents('ul:first')
                .find('a')
                    .removeClass('selected')
                .end()
            .end()
            .addClass('selected');
    }

    $('#slider .nav').find('a').click(selectNav);

    // go find the nav link that has this target and select the nav
    function trigger(data) {
        var el = $('#slider .nav').find('a[href$="' + data.id + '"]').get(0);
        selectNav.call(el);
    }

    if (window.location.hash) {
        trigger({ id : window.location.hash.substr(1) });
    } else {
        $('ul.nav a:first').click();
    }

    // offset
    var offset = parseInt((horizontal ?
        $container.css('paddingTop') :
        $container.css('paddingLeft'))
        || 0) * -1;


    var scrollOptions = {
        target: $scroll, // the element that has the overflow

        // can be a selector which will be relative to the target
        items: $panels,

        nav: '.nav a',

        // selectors are NOT relative to document, i.e. make sure they're unique
        prev: 'img.left',
        next: 'img.right',

        // allow the scroll effect to run both directions
        axis: 'xy',

        onAfter: trigger, // final callback

        offset: offset,

        // duration of the sliding effect
        duration: 500,

        easing: 'swing'
    };

    $('#slider').serialScroll(scrollOptions);

    $.localScroll(scrollOptions);

    scrollOptions.duration = 1;
    $.localScroll.hash(scrollOptions);

});

Полагаю, вся проблема в slider.js (к которому подключается еще и serialscroll.js, но добавлять его не стал, так как в плане плавного появления все работает) для которого я и пытался самостоятельно реализовать данный момент, но пока не выходит, работает коряво.

Заранее благодарен. Yes

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


.rar  slider.rar (Размер: 39.21 Кб / Загрузок: 1)

Видно явно, как работает перемотка для верхних вкладок и для нижних.
(Последний раз сообщение было отредактировано 22.01.2016 в 15:16:31, отредактировал пользователь ale10ey.)
22.01.2016 14:21:27
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #7
RE: Плавная перемотка контента на странице
Вот наколдовал немного, в результате пришлось и в код jQuery.ScrollTo тоже внести небольшие изменения.

Короче чем описывать изменения, проще скину конечный код:
.rar  slider.rar (Размер: 5.25 Кб / Загрузок: 3)

Для уменьшения размера прикрепления не стал туда прикреплять библиотеку jquery.js.

Обратите внимание, что в файле test.html теперь имеются только верхние ссылки "Страница 1, Страница 2, Страница 3". Нижние ссылки клонируются при помощи jQuery.
23.01.2016 23:43:16
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #8
RE: Плавная перемотка контента на странице
Доброе время суток, работает Ok, спасибо Yes.

Есть только один момент...
Ссылки работают правильно, контент появляется согласно текущей странице и ссылка активна как верхняя, так и нижняя, тут все нормально.

Если, например, нахожусь на 2 странице или на 3 и пробую обновить страницу вручную, то после перезагрузки становится активная "Страница 1", а вот контент на странице 1 остается тот, на которой было обновление, т.е.

1. После перезагрузки страницы 2, Страница 1 становится активной и высота равняется контенту Страницы 1, а содержимое на этой странице (Страница 1) после обновления принадлежит дугой странице, т.е. Странице 2 или 3.

В 1 случае я делал обновление на странице 2, где всего 2 строчки (на странице 1 - 10 строчек), то после обновления Страница 1 стала активной, контент от 2 страницы, а высота для Страницы 1 и всего 2 строчки, а остальные 8 строк пустые, т.е. много свободного места, так как на Странице 1 - 10 строк.

Во 2 случае делал обновление для Страницы 3 (где 20 строчек), аналогично для обновления 2 страницы, но теперь контент для 3 страницы обрезается.

Проще говоря, после обновления на Странице 2 или 3, сбрасывается все кроме контента, который остается на Странице 1 от той странице на которой было обновление.

Так все работает нормально, решил с этим тоже заморочится, есть вероятность что пользователь может обновить страницу вручную, например, случайно и дизайн пострадает...

Долго описывал проблему, но надеюсь вы смогли понять что к чему.

Заранее благодарен Yes

P.S.: Кстати вы можете проверить на примере, который вы реализовали, там видно, что происходит после обновления на Странице 2 или 3.
(Последний раз сообщение было отредактировано 24.01.2016 в 14:17:34, отредактировал пользователь ale10ey.)
24.01.2016 14:10:53
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #9
RE: Плавная перемотка контента на странице
Кстати данный эффект проявляется только в Firefox.
В Опере, Хроме и IE такого не наблюдается. Там при обновлении странички всегда все сбрасывается к странице 1 (и размер и содержимое).

Надо подумать, как от этого избавиться.
24.01.2016 14:34:49
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #10
RE: Плавная перемотка контента на странице
Я проверял только в Firefox, поэтому сразу и заметил данный момент, в других браузерах OK.

Буду ожидать, так как хотелось бы и в Firefox данный баг устранить, чтобы с пользователями Firefox (а их много) проблем не было.

Благодарен за помощь Yes
24.01.2016 14:48:29
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru