2013-04-30 55 views
0

的問題理解JavaScript的滾動和iFrame的

我有一個Flash SWF被加載到隨後被裝載到Facebook的帆布一個PHP頁面。無論我的遊戲內容的高度如何,FB頁面的右側廣告區域都會創建一個垂直滾動條。爲了完全填充畫布的內容區域,我的遊戲的畫布有一個流暢的高度。

我的遊戲中有一個縮放功能,由鼠標滾輪觸發。

當使用鼠標滾輪(放大我的遊戲)時,瀏覽器也會抓取這些內容以滾動內容。所以我得到了一個同時進行縮放/滾動的效果,這至少是不可取的。

問題

我知道FB應用程序iframe中的我的遊戲內容不能直接利用的應用程序的HTML頁面。所以試圖在FB頁面上設置屬性是毫無意義的。但我在想,是否有辦法在我的遊戲內容上捕捉滾動事件,並阻止它進入包裝FB頁面?

我不明白DOM是否足以知道這是否可能。我想像一個Flash開發人員,因爲我們可以停止事件傳播。我只是不知道在哪個方向或從什麼DOM元素滾動事件將起源。

回答

0

OK我解決了這個(我認爲)...

我無法停止FB應用的滾動是因爲如果畫布是流體,則內容不會有溢出的原因是什麼?並不會觸發滾動事件。但它會觸發鼠標滾輪事件,這是通過鼠標生成滾動事件的必要步驟。

我將代碼添加到了我的內容div,從而監聽mousewheel事件。然後我取消該事件&阻止它傳播給iFrame的所有者。

<html> 
<head> 
    <script type="text/javascript"> 
     function init() 
     { 
      //window.addEventListener('scroll', listener, false); 
     } 

    </script> 
</head> 

<body onload="init()"> 
    <script type="text/javascript"> 

     function onScrollHandler(event) 
     { 
      event.preventDefault(); 
      event.stopPropagation(); 

      //alert("scrolling");  
     } 

    </script> 

    <div id="content" onmousewheel="onScrollHandler(event)" onclick="alert('click')" style="position: absolute; top: 0px; bottom: 0px; left: 0px; right: 0px; background-color:#b0c4de;"> 
     content area 
    </div> 
</body> 

+0

只是一個更新,這不是一個完整的解決方案。爲了這個工作,你必須通過ExternalInterface調用手動將已取消的js事件傳遞到SWF中,然後你可以重新創建一個帶有滾動所需屬性的as3事件(通常只是滾動delta)。 – jusopi 2013-08-08 05:55:14