3

我在 div 中有一个 flash 对象,当我滚动它时会缩放它的内容。问题是我的页面也会滚动,我不知道如何解决这个问题。当我滚动闪光灯时,我需要页面静止不动。

我试着添加这个

 flashContainer.bind('mousewheel DOMMouseScroll', function(e) {
                var scrollTo = null;

                if (e.type === 'mousewheel') {
                    scrollTo = (e.originalEvent.wheelDelta * -1);
                } else if (e.type === 'DOMMouseScroll') {
                    scrollTo = 40 * e.originalEvent.detail;
                }

                if (scrollTo) {
                    e.preventDefault();
                    $(this).scrollTop(scrollTo + $(this).scrollTop());
                }
            });

但由于 preventDefault,flash 对象将不再缩放。

你有什么建议吗?

4

3 回答 3

1

可能这对你有用:

$("element").hover(function(){
    var scrollT = $(document).scrollTop();
    $(document).on("scroll", function(e){
        $(document).scrollTop(scrollT);
    });
}, function(){
    $(document).off("scroll");
});

http://jsfiddle.net/ZFsDY/3/

于 2013-06-26T13:09:06.433 回答
0

另一个尝试:

$("element").bind( 'mousewheel DOMMouseScroll', function ( e ) {
    var d = e.wheelDelta || -e.detail;
    var s;
    if(d < 0) s = 1;
    else s = -1;
    this.scrollTop += s * 30;
    e.preventDefault();
});

http://jsfiddle.net/ZFsDY/5/

于 2013-06-26T14:14:25.407 回答
0

几个月前我偶然发现了这个问题(我们用来管理滚动的旧方法在最新的浏览器上不起作用)。我不允许发布它的代码,但这里有一些关于我们是如何做到的。

就像在 reyaner 的回答中一样,我们使用事件监听和 preventDefault() 来禁用浏览器自动滚动,并获取滚动值(但没有 scrollTop())。一旦我们有了值,我们就通过 ExternalInterface 将它发送到 Flash。为此,flash 对象必须事先添加一个 Callback,这是一个可以被 Javascript 调用的 Flash 方法。

我们在 Flash 和 JS 之间添加了一些额外的交互,以便只有当 Flash 获得焦点时才会锁定滚动。

警告:所有浏览器的 wheelDelta 比例都不相同,您可能会发现缩放速度可能会有所不同。为了解决这个问题,我们决定每次调度事件时始终使用固定步骤,而不是按原样使用增量。

于 2013-06-27T17:03:53.150 回答