Jscrollpane和内部锚链接

时间:2011-08-30 12:24:05

标签: javascript jquery jscrollpane

我正在使用Jscrollpane并且一切都很好,除非我尝试将其与内部锚点一起使用。 它应该像官方页面上的示例一样工作。

但在我的例子中它确实破坏了我的网站。整个内容都是向上浮动的,我自己也无法弄明白。

这是我的页面:http://kunden.kunstrasen.at/htmltriest/index.php?site=dieanreise&user_lang=de 如果点击内部锚点:http://kunden.kunstrasen.at/htmltriest/index.php?site=dieanreise&user_lang=de#westautobahn

有人在这里发生什么事吗? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

jspane不适用于旧式锚点 例如

<a name="anchor"></a>

而你必须写

<a id="anchor"></a>

另外你必须启用

hijackInternalLinks: true;

在jScrollPane设置对象中。

hijackInternalLinks还捕获滚动窗口外部的链接,如果你只需要内部链接就可以添加这些代码,比如hijackInternalLinks它会绑定a元素上的click funktion并调用带有目标的scrollToElement:

            \$(document).ready(function() {
            panes = \$(".scroll");
            //hijackInternalLinks: true;
            panes.jScrollPane({
            });
            panes.each(function(i,obj){
                var pane = \$(obj);
                var api = pane.data('jsp');
                var links = pane.find("a");
                links.bind('click', function() {
                    var uriParts = this.href.split('#');
                    if (uriParts.length == 2) {
                        var target = '#' + uriParts[1];
                        try{
                            api.scrollToElement(target, true);
                        }catch(e){
                            alert(e);
                        }
                        return false;
                    }
                });
            });
        });

但请注意,您始终必须在代码上使用id属性。 如果您使用的是tinymce,可以使用此功能修复代码

function myCustomCleanup(type, value) {
    switch (type) {
            case "get_from_editor_dom":
                    var as = value.getElementsByTagName("a");
                    for(var i=0; i< as.length;i++){
                        if (as[i].hasAttribute('name')){
                            var name = as[i].getAttribute('name');
                            as[i].setAttribute('id',name);
                        }
                    }
                    break;
    }

    return value;

}