【问题标题】:Scroll an iframe without having to mouse over it滚动 iframe 而无需将鼠标悬停在它上面
【发布时间】:2013-02-25 10:41:56
【问题描述】:

我有一个 iframe,用于显示网页的主要内容;但是,无论鼠标指向何处,我都想让 IFRAME 滚动。我不希望我的访问者因为无法滚动而感到困惑,除非他们的鼠标位于 iframe 上。这可能吗?要在鼠标悬停在正文上的任意位置滚动 iframe?

我不会链接任何代码,因为我拥有的唯一相关代码是 标记。

(正文本身不能滚动,隐藏滚动条)

【问题讨论】:

  • 我在谷歌或这个网站上找不到任何与此相关的内容:(
  • 我认为以某种方式使用 javascript 是可能的……但我对 JS 不太了解,无法创建它。将整个 的鼠标悬停区域定义为链接到 iframe 的东西,以便在框架边界之外滚动鼠标滚轮仍会滚动它。
  • 我想我需要有人给我写一个代码,基本上说:“body.hover(或body onmouseover)滚动iframeid”或类似的东西哈哈,就像我说我在JS上失败了。
  • 我会使用 jQuery 的 .load() 将页面加载到当前页面的 div 中并使其可滚动,而不是 iframe 本身就是一个窗口。
  • 这是否意味着我可以将整个 iframe 内容加载到 div 中?这会解决“无论您的鼠标指针在哪里都可以滚动吗?”

标签: iframe scroll mouseover


【解决方案1】:

好的。我为此制定了一个相当快速而肮脏的解决方案,其中包括以下步骤:

  • 为您的<iframe> 元素添加一个“id”。 (在我的示例中,我使用了id="myFrame"
  • jQuery Mousewheel 插件与最新的 jQuery 一起附加到 html 页面的页眉。


<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" src="https://raw.github.com/brandonaaron/jquery-mousewheel/master/jquery.mousewheel.js"></script>


  • 最后在 html 正文的末尾或 iframe 本身之后添加以下 javascript 代码。


<script type="text/javascript">
    var scrolloffset = 30;  // amount of scrolling per mousewheel step

    var myFrame = $('#myFrame');  // the iframe ID
    var frameScrollPosition = 0;

    $(window).mousewheel(function(event,delta){

        // reset stored offset so that it matches with iframe's
        frameScrollPosition = myFrame.contents().scrollTop();

        var frameHeight = myFrame.contents().height() - myFrame.height();

        if(delta > 0){
            var newPosition = frameScrollPosition - scrolloffset;
        } else {
            var newPosition = frameScrollPosition + scrolloffset;
        }

        if(newPosition < 0){
            newPosition = 0;
        }

        if(newPosition >= frameHeight){
            newPosition = frameHeight;
        }

        frameScrollPosition = newPosition;
        myFrame.contents().scrollTop(frameScrollPosition);

    });
</script>

确保你 download 插件而不是像我一样从 github 调用它。这只是为了测试和概念验证。

【讨论】:

  • 照你说的做了,但没有发生任何不同:(在 Chrome、Safari 和 Firefox 中测试。测试时这对你有用吗?
  • 可能与此代码冲突的是 iFrame 本身不可滚动 - 我使用 iframe 源中的滚动条,而不是使 iframe 本身仅滚动其源的内容。这可能是问题吗? (如果我更改它以便 iframe 滚动,我会在某些浏览器中丢失我的自定义滚动条。)
  • (抱歉回复晚了,我正在度假!)感谢您的帮助:)
  • @TommyBlackburn 这是我的临时测试alderis.net/iframe.html 作为证明。 IE 有问题(并不感到惊讶)。在其他浏览器上它工作正常。一般来说,使用 iframe 是一件很痛苦的事情。请按照我的说明重新对您的页面进行所有更改,以便我查看问题所在。
  • 我无法弄清楚...经过数小时的测试,即使将您的确切示例复制到我的计算机进行测试,它也不起作用。它在您提供的链接上对我有用,但是当我将您所做的一切复制到我计算机上的文件夹时,它不起作用。我很难过。
猜你喜欢
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 2022-06-19
  • 1970-01-01
  • 2019-03-03
  • 2015-11-16
相关资源
最近更新 更多