2015-09-23 3 views
1

Что я пытаюсь сделать, это ввести кнопку в правом нижнем углу экрана, где пользователи могут щелкнуть по кнопке, чтобы перейти к следующему разделу «раздел». Как только они достигнут последнего div в html, он должен вернуться к первому section div.Прокрутите до пункта «нажимайте», перейдите в конец

Мое предложенное решение заключается в том, что когда страница изначально загружает его, он собирает массив элементов, имя класса которых является «секцией», а затем, когда пользователь нажимает кнопку, он циклически перемещает их по прокрутке страницы. Это возможно?

Вот ссылка на прокручиваемый JavaScript, который я пытался использовать.

HTML

<!DOCTYPE html> 
 
<html> 
 
<body> 
 
<script src="https://code.jquery.com/jquery-1.7.2.js"></script> 
 

 
<script> 
 
$(document).ready(function(){ 
 
    $('.btnPrev').click(function() { 
 
     var target; 
 
     $(".section").each(function(i, element) { 
 
     target = $(element).offset().top - 20; 
 
     if (target - 40 > $(document).scrollTop()) { 
 
      return false; // break 
 
     } 
 
     }); 
 
     $("html, body").animate({scrollTop: target}, 700); 
 
    }); 
 
    $('.btnNext').click(function() { 
 
     var target; 
 
     $(".section").each(function(i, element) { 
 
     target = $(element).offset().top - 20; 
 
     if (target - 40 > $(document).scrollTop()) { 
 
      return false; // break 
 
     } 
 
     }); 
 
     $("html, body").animate({scrollTop: target}, 700); 
 
    }); 
 
}); 
 
</script> 
 

 
<style type="text/css"> 
 
    html {background-color: rgb(40,40,40);} 
 
\t .section {background-color:lightblue;margin: 40px 100px; padding:20px; height:300px;} 
 
    .rowA {background-color:lightgreen;} 
 

 
    /*Scroll Buttons*/ 
 
    .btnScroll {position: fixed; background-color: rgba(0,0,0,.5); width:40px; height:40px; text-align:center; line-height:40px; color:white; border-radius:4px;} 
 
    .btnScroll:hover {background-color: rgba(255,255,255,.2); cursor:pointer;} 
 
    .btnScroll:active {background-color: rgba(255,255,255,.5); cursor:pointer; selection:none;} 
 
    .btnPrev {bottom: 70px; right: 20px;} 
 
    .btnNext {bottom: 20px; right: 20px;} 
 
    .noselect { 
 
     -webkit-touch-callout: none; 
 
     -webkit-user-select: none; 
 
     -khtml-user-select: none; 
 
     -moz-user-select: none; 
 
     -ms-user-select: none; 
 
     user-select: none; 
 
    } 
 
</style> 
 

 

 
<script src="rats.js"></script> 
 

 
<div class="section rowA">Content Here</div> 
 
<div class="section rowB">Content Here</div> 
 
<div class="section rowA">Content Here</div> 
 
<div class="section rowB">Content Here</div> 
 
<div class="section rowA">Content Here</div> 
 
<div class="section rowB">Content Here</div> 
 
<div class="section rowA">Content Here</div> 
 

 
<div class="btnScroll btnPrev noselect">&#8593;</div> 
 
<div class="btnScroll btnNext noselect">&#8595;</div> 
 

 
</body> 
 
</html>

+0

Как-то ваш jquery не относится к вашему html вообще. Вы связали событие click, чтобы связать теги, хотя у вас нет ни одного 'a'-тега на странице. – alpipego

+0

обновил код – JokerMartini

ответ

1

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

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

Демо:

var curr_el_index = 0; 
 
var els_length = $(".section").length; 
 

 
$('.btnNext').click(function() { 
 
    curr_el_index++; 
 
    if (curr_el_index >= els_length) curr_el_index = 0; 
 
    $("html, body").animate({ 
 
     scrollTop: $(".section").eq(curr_el_index).offset().top - 20 
 
    }, 700); 
 
}); 
 

 
$('.btnPrev').click(function() { 
 
    curr_el_index--; 
 
    if (curr_el_index < 0) curr_el_index = els_length - 1; 
 
    $("html, body").animate({ 
 
     scrollTop: $(".section").eq(curr_el_index).offset().top - 20 
 
    }, 700); 
 
});
html { 
 
    background-color: rgb(40, 40, 40); 
 
} 
 
.section { 
 
    background-color:lightblue; 
 
    margin: 40px 100px; 
 
    padding:20px; 
 
    height:300px; 
 
} 
 
.rowA { 
 
    background-color:lightgreen; 
 
} 
 
/*Scroll Buttons*/ 
 
.btnScroll { 
 
    position: fixed; 
 
    background-color: rgba(0, 0, 0, .5); 
 
    width:40px; 
 
    height:40px; 
 
    text-align:center; 
 
    line-height:40px; 
 
    color:white; 
 
    border-radius:4px; 
 
} 
 
.btnScroll:hover { 
 
    background-color: rgba(255, 255, 255, .2); 
 
    cursor:pointer; 
 
} 
 
.btnScroll:active { 
 
    background-color: rgba(255, 255, 255, .5); 
 
    cursor:pointer; 
 
    selection:none; 
 
} 
 
.btnPrev { 
 
    bottom: 70px; 
 
    right: 20px; 
 
} 
 
.btnNext { 
 
    bottom: 20px; 
 
    right: 20px; 
 
} 
 
.noselect { 
 
    -webkit-touch-callout: none; 
 
    -webkit-user-select: none; 
 
    -khtml-user-select: none; 
 
    -moz-user-select: none; 
 
    -ms-user-select: none; 
 
    user-select: none; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="section rowA">Content Here</div> 
 
<div class="section rowB">Content Here</div> 
 
<div class="section rowA">Content Here</div> 
 
<div class="section rowB">Content Here</div> 
 
<div class="section rowA">Content Here</div> 
 
<div class="section rowB">Content Here</div> 
 
<div class="section rowA">Content Here</div> 
 
<div class="btnScroll btnPrev noselect">&#8593;</div> 
 
<div class="btnScroll btnNext noselect">&#8595;</div>

JSFiddle Версия: https://jsfiddle.net/9x335kzg/3/

2

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

1) Инициализируйте первый элемент классом .selected.

2) На пейджере нажмите, переместите класс .selected либо вверх, либо вниз по указанным элементам.

3) После того, как класс был перемещен на вновь выбранный элемент, выделите этот элемент (элемент с классом .selected).

Вот скрипка от результата:

http://jsfiddle.net/rt13qnmm/

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

Все анимации завершены с помощью пользовательской функции scrollToSelected(offset)

// Perform animation to the '.selected' class 
function scrollToSelected(offset){ 
    $('html,body').stop(true).animate({ 
     scrollTop:$('.selected').offset().top + offset 
    }, 'slow'); 
} 

(Это может быть еще более развязкой путем удаления жестко .selected селектор JQuery и передать его в качестве параметра функции вместо этого, позволяя вам для прокрутки до любого элемента на вашем сайте)

Смежные вопросы