Выделите div, используя jquery - PullRequest
192 голосов
/ 08 августа 2010

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

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

РЕДАКТИРОВАТЬ: HTML

<!DOCTYPE html>

<html lang="en">

    <head>
    <meta charset="utf-8">

    <!-- jQuery-->
    <script src = "<?php echo base_url() ?>assets/js/jquery.js"></script>

    <!-- .js file-->
    <script src = "<?php echo base_url() ?>assets/js/pagetwo.js"></script>

    <link rel="stylesheet" type="text/css" href="<?php echo base_url()?>assets/css/reset.css" />    

    <!-- .css for page -->
    <link rel="stylesheet" type="text/css" href="<?php echo base_url()?>assets/css/pagetwo.css"/>                       

    <!-- page title-->
    <title><!-- Insert Title --></title>


</head>
<body>
    <div id="container">

        <div id="sidebar">
            <ul>
                <li><a id = "aboutlink" href="#">auck</a></li>
                <li><a id = "peojectslink" href="#">Projects</a></li>
                <li><a id = "resumelink" href="#">Resume</a></li>
                <li><a id = "contactlink" href="#">Contact</a></li>
            </ul>
        </div>

        <div id="content">
            <div class="" id="about">
                <p class="header">uck</p>
                <p class="info">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
            </div>
            <div class="sections"id="projects">
                <p class = "header">Projects</p>
                <p class="info">Projects</p>
            </div>
            <div class="sections" id="resume">
                <p class = "header">Resume</p>
                <p class="info">Resume</p>
            </div>
            <div class="sections" id="contacts">
                <p class = "header">Contact</p>
                <p class="info">Contact</p>
            </div>
        </div>
    </div>
</body>

Спасибо за помощь

Ответы [ 7 ]

330 голосов
/ 08 августа 2010

Во-первых, ваш код не содержит contact div, он имеет contacts div!

В боковой панели у вас есть contact в div в нижней части страницы у вас есть contacts.Я удалил окончательный s для примера кода.(вы также неправильно написали идентификатор projectslink на боковой панели).

Во-вторых, взгляните на некоторые примеры для click на справочной странице jQuery.Вы должны использовать click like, object.click( function() { // Your code here } );, чтобы привязать обработчик события click к объекту .... Как в моем примере ниже.Кроме того, вы также можете просто инициировать щелчок по объекту, используя его без аргументов, например object.click().

В-третьих, scrollTo - это плагин в jQuery.Я не знаю, установлен ли у вас плагин.Вы не можете использовать scrollTo() без плагина.В этом случае требуемая функциональность составляет всего 2 строки кода, поэтому я не вижу смысла использовать плагин.

Хорошо, теперь перейдем к решению.

Код ниже будет прокручиватьсяна правильный div, если вы нажмете ссылку на боковой панели.Окно должно быть достаточно большим, чтобы можно было прокручивать:

// This is a functions that scrolls to #{blah}link
function goToByScroll(id) {
    // Remove "link" from the ID
    id = id.replace("link", "");
    // Scroll
    $('html,body').animate({
        scrollTop: $("#" + id).offset().top
    }, 'slow');
}

$("#sidebar > ul > li > a").click(function(e) {
    // Prevent a page reload when a link is pressed
    e.preventDefault();
    // Call the scroll function
    goToByScroll(this.id);
});

Живой пример

(Прокрутите до функции, взятой из здесь )


PS: Очевидно, у вас должна быть веская причина для того, чтобы идти по этому маршруту вместо использования якорных тегов <a href="#gohere">blah</a> ... <a name="gohere">blah title</a>

108 голосов
/ 08 августа 2010

В jQuery нет метода .scrollTo(), но есть метод .scrollTop()..scrollTop ожидает параметр, то есть значение пикселя, на которое должна прокручиваться полоса прокрутки.

Пример:

$(window).scrollTop(200);

прокрутит окно (если в нем достаточно содержимого).

Таким образом, вы можете получить это желаемое значение с помощью .offset() или .position().

Пример:

$(window).scrollTop($('#contact').offset().top);

Это приведет к прокрутке элемента #contact.

Альтернативный метод не-jQuery - .scrollIntoView().Вы можете вызывать этот метод для любого DOM element, например:

$('#contact')[0].scrollIntoView(true);

true указывает, что элемент расположен сверху, тогда как false разместит его в нижней части представления.Хорошая вещь с методом jQuery, вы даже можете использовать его с fx functions, как .animate().Таким образом, вы можете плавно прокрутить что-нибудь.

Ссылка: .scrollTop () , .position () , .offset ()

21 голосов
/ 25 августа 2014

вы можете попробовать:

$("#MediaPlayer").ready(function(){
    $("html, body").delay(2000).animate({
        scrollTop: $('#MediaPlayer').offset().top 
    }, 2000);
});
12 голосов
/ 08 августа 2010

Добавьте эту маленькую функцию и используйте ее так: $('div').scrollTo(500);

jQuery.fn.extend(
{
  scrollTo : function(speed, easing)
  {
    return this.each(function()
    {
      var targetOffset = $(this).offset().top;
      $('html,body').animate({scrollTop: targetOffset}, speed, easing);
    });
  }
});
6 голосов
/ 20 марта 2013

Хорошо, ребята, это небольшое решение, но оно работает нормально.

предположим, что следующий код:

<div id='the_div_holder' style='height: 400px; overflow-y: scroll'>
  <div class='post'>1st post</div>
  <div class='post'>2nd post</div>
  <div class='post'>3rd post</div>
</div>

Вы хотите, чтобы, когда новое сообщение добавлялось в 'the_div_holder', оно прокручивало свое внутреннее содержимое (.post's div) до последнего, как чат Итак, делайте следующее, когда новый .post добавляется к основному держателю div:

var scroll = function(div) {
    var totalHeight = 0;
    div.find('.post').each(function(){
       totalHeight += $(this).outerHeight();
    });
    div.scrollTop(totalHeight);
  }
  // call it:
  scroll($('#the_div_holder'));
3 голосов
/ 26 апреля 2015

Сначала получите позицию элемента div, до которой вы хотите прокрутить, методом jQuery position ().
Пример: var pos = $ ("div"). Position ();
Затем получите y кординаты (высоту) этого элемента методом " .top ".
Пример: pos.top;
Затем получаем x-кординаты для этого элемента div с помощью метода " .left ".
Эти методы происходят из позиционирования CSS.
Как только мы получаем x & y-кординаты,можно использовать метод javascript scrollTo (); .
Этот метод прокручивает документ до определенной высоты и ширины.
Он принимает два параметра как x & y cordinates.Синтаксис: window.scrollTo (x, y);
Затем просто передайте x & y cordinates элемента DIV в функцию scrollTo () .
См. Пример ниже ↓ ↓

<!DOCTYPE HTML>
    <html>
    <head>
        <title>
            Scroll upto Div with jQuery.
        </title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
        <script>
            $(document).ready(function () {
                $("#button1").click(function () {
                    var x = $("#element").position(); //gets the position of the div element...
                    window.scrollTo(x.left, x.top); //window.scrollTo() scrolls the page upto certain position....
                    //it takes 2 parameters : (x axis cordinate, y axis cordinate);
                });
            });
            </script>
    </head>
    <body>
        <button id="button1">
            Click here to scroll
        </button>

        <div id="element" style="position:absolute;top:200%;left:0%;background-color:orange;height:100px;width:200px;">
            The DIV element.
            </div>
        </body>
    </html>
0 голосов
/ 09 июня 2019

Не нужно тоже это. Просто добавьте div id к href тега

<li><a id = "aboutlink" href="#about">auck</a></li>

Просто так.

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