fireFox中的slimScroll.js + iframe问题

时间:2012-10-26 08:04:00

标签: jquery jquery-ui firefox iframe slimscroll

只有在使用iframe加载内容时,我才遇到FireFox中的slimScroll / jQuery UI问题。该代码适用于所有其他浏览器。

如果您正常加载iframe,它可以正常工作。如果你加载它隐藏起来(.hide()或display:none;)它仍然会加载,但是不会显示slimScroll可拖动条(只有轨道存在)。

我认为这是一个FireFox滚动问题,或者可能是一个jQuery UI可拖动问题。无论哪种方式,我都无法弄明白。

放入父页面的脚本(parent.html):

        $(document).ready(function () {
        var tip = $('<div id="tip" style="position:absolute;top:90px;left:190px;height:120px;' + 'width:275px;border:1px solid grey;z-index:2147483647;overflow:hidden;">' + "<iframe frameborder='0' scrolling='no' src='content.html' width='275px' height='120px' id='myiframe' type='content' style='display:block;visibility:visible'></iframe>" + '</div>');
        $('body').prepend(tip);
        $('#showtip').click(function (event) {
            $('#tip').show();   
        });
        $('#tip').hide();  //comment this line out and it works correctly...
        });

父页面还有一个显示iframe的链接:

<a href="#" id="showtip">Click to Show Iframe</a>

内容页面脚本(content.html):

    $(document).ready(function () {
    $('#scroll').slimScroll({
        height: 95,
        railVisible: true,
        alwaysVisible: true,
        allowPageScroll: false
    });     
});

content.html的虚拟内容:

<div id="scroll">This is the iframe content area <p>This is the iframe content area</p> p>This is the iframe content area</p> <p>This is the iframe content area</p> </div>

需要JS参考:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.23/jquery-ui.js"></script>
<script type="text/javascript" src="https://raw.github.com/rochal/jQuery-slimScroll/master/slimScroll.min.js"></script>

就是这样。

2 个答案:

答案 0 :(得分:1)

通常所有jQuery滚动条都会计算应用它的容器的高度/宽度,并在其上放置滚动条。

当您在jQuery中执行hide()时,它会执行display:none,该元素根本不会呈现,因此没有自己的高度/宽度。因此,你没有看到一个slimscroll。 (您会发现其他jQuery卷轴存在类似问题。)

要克服这种情况,请在取消隐藏后致电$('#scroll').slimScroll()。在这种情况下,仅当iframe位于同一域时才可能。

或者更好的方法,不要使用hide(),而是使用

$('#tip').css('visibility','hidden');$('#tip').css('visibility','visible');

答案 1 :(得分:0)

我认为框架附加到正文但不能与DOM绑定,您应该将iframe绑定到document并尝试

 $("#showtip").live('click',function(){

    //use .live instead of `click`
 });

希望你明白。