jquery scrollTop не работает в IE8 - PullRequest
3 голосов
/ 14 октября 2011

Я пытаюсь прокрутить страницу на основе хеша на URL. Вот мой код:

var hash = window.location.hash;
$(hash).scrollTop();

Это ни к чему. Так что я делаю не так? И еще, мне нужно что-то вроде этого:

$(hash).scrollTop($("#header").height());

Возможно ли это? .. Мой div (на который указывает хеш элемента) будет прокручиваться вверх, вниз до "#header"? ..

Обновление 1

Текст хэша является идентификатором, поэтому он возвращает текст "#myid" из window.location.hash. Еще одна вещь, div заголовка имеет position:fixed на своем css, в то время как контейнер, в котором div (хэш id'd для) имеет position:absolute, поэтому он прокручивается под #header, поэтому мне нужно это прокрутить до нижней части заголовка или высоты.

Обновление 2

Я сейчас пытаюсь использовать плагин scrollIntoView () , но у меня ошибка.

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
Timestamp: Mon, 17 Oct 2011 03:23:18 UTC


Message: Object doesn't support this property or method
Line: 71
Char: 5
Code: 0
URI: http://localhost:3000/javascripts/jquery.scrollIntoView.js


Message: Object doesn't support this property or method
Line: 34
Char: 5
Code: 0
URI: http://localhost:3000/surveys/%E6%83%85%E5%A0%B1%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%BB%E5%80%8B%E4%BA%BA%E6%83%85%E5%A0%B1%E4%BF%9D%E8%AD%B7%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E3%82%B7%E3%83%BC%E3%83%88%EF%BC%88%E8%87%AA%E5%B7%B1%E7%82%B9%E6%A4%9C%EF%BC%89-%E7%89%88-1-0/C9uKCqXNn2/take?section=17

Мой код: $("#survey_section_8").scrollIntoView();

что я тут не так делаю? ..

Надеюсь, что я был ясен в своих вопросах. Спасибо!

Ответы [ 3 ]

4 голосов
/ 14 октября 2011

Вам нужно что-то еще, чтобы прокрутить до указанного якоря:

var y = $('a[name=' + window.location.hash + ']').offset().top;
$("html, body").scrollTop(y);

Обратите внимание, что вам потребуется текст в этом <a> (например, просто пробел), чтобы получить offset.

0 голосов
/ 18 октября 2011

Я использовал этот плагин jQuery.ScrollTo () .Но все же я не могу избавиться от этой ошибки.Поэтому я попытался поместить свой код в javascript плагина.Эврика!это сработало!Я думаю, что ошибка вызвана другим jquery внутри страницы.Вот что я вставил в javascript:

jQuery(function( $ ){
                //borrowed from jQuery easing plugin
                //http://gsgd.co.uk/sandbox/jquery.easing.php
                $.easing.elasout = function(x, t, b, c, d) {
                        var s=1.70158;var p=0;var a=c;
                        if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
                        if (a < Math.abs(c)) { a=c; var s=p/4; }
                        else var s = p/(2*Math.PI) * Math.asin (c/a);
                        return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
                };

                $(document).ready(function(){
                    $.scrollTo(window.location.hash, {speed:800, easing:'swing',axis:'y',offset:{top:-(parseInt($('#header').height()))}});
                });
            });

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

0 голосов
/ 14 октября 2011

$(window.location.hash) мало что сделает для вас, потому что это всего лишь строка.jQuery нужно больше инструкций для поиска искомого элемента.

Является ли хэш-текст идентификатором, классом или именем элемента на странице?Возможно, вам понадобится поставить префикс «.»или "#" или в сочетании с другим селектором, чтобы jQuery мог найти элемент привязки, сгенерировавший хеш.

Во-вторых, вызов .scrollTop() без каких-либо параметров возвращает положение прокрутки вверху;это не прокручивается к вершине.Передача в него параметра устанавливает вертикальную позицию прокрутки для элемента, к которому он был вызван.Ответ @N Ролера гораздо ближе к рабочему примеру, чем я мог бы придумать.Это должно быть хорошим началом для вас.

...