2014-09-02 2 views
1

У меня есть флеш внутри и iFrame, и я хочу щелкнуть по iFrame, но не через вспышку. Я видел это, мы можем щелкнуть через iFrame через «pointer-events: none»; но он передает все внутри iframe. Теперь я просто хочу знать, что мы можем включить или проверить щелчок мыши во флэш-памяти?Нажмите iframe со вспышкой в ​​нем

Я добавил образец для моего вопроса. черные точки находятся в файле swf swf и в iFrame. Теперь, когда я нажимаю на прозрачную область, в этом случае нужно щелкнуть по области внизу, которая является кнопками Label. в противном случае следует щелкнуть черными точками.

Click Underneath Flash

+0

Вы хотите, чтобы у вас была возможность щелкнуть то, что находится под флэш-содержимым в iframe (оно находится над чем-то)? Боюсь, я не понимаю всю проблему. – lemieuxster

+0

Да, я хочу щелкнуть под частью прозрачной области. Flash находится сверху, а кнопки HTML находятся под флэш-фреймером. – VarunJi

+0

Я обновил свой вопрос с моментальным снимком. Поэтому, пожалуйста, дайте мне знать, если вы можете помочь. – VarunJi

ответ

1

Я думаю, что это не имеет значения, если вы находитесь в IFRAME в этом случае, если я правильно понимаю, что вы хотите пройти по кликам из флэш-памяти к основной HTML-страницы, но только если щелчок Безразлично 't удовлетворяет некоторому условию (в этом случае, только если оно не над черными пятнами).

подход будет делать это совместно между Flash-части, а некоторые JavaScript часть в IFRAME:

  • перехватывать нажмите на Flash, получить координаты и убедитесь, что это за черный круг
  • Если он обрабатывает соответствующую логику во Flash, иначе выполняйте следующие шаги:
  • Передайте координаты функции JavaScript, уже определенной в iframe через внешний интерфейс Flash
  • Наконец, в JavaScript вы можете сделать что-то г вдоль линий How to simulate a click by using x,y coordinates in JavaScript?
+0

Спасибо Circlespainter за ваш ответ. Но, к сожалению, эти круги и фигуры анимированы. Поэтому я не могу применить эту логику. Я попытался в браузере IE для wmode = transparent, и он отлично работает там, но не в Chrome и Firefox. – VarunJi

+0

Да, wmode = прозрачный может быть неприятным и может иметь соответствующее влияние на производительность. Разве вы не можете сделать свою флеш-логику умнее, указав положение кругов? – circlespainter

1

сделать список:

  1. Используйте атрибут CSS pointer-events: none; на IFRAME
  2. Создать невидимое DIV с ID = "EVENT-людоед", который охватывает элементы.
  3. Добавить Javascript ниже (использует JQuery) для поруки, где щелчок произошел
  4. Это будет вызывать ACTIONSCRIPT метод ClickPosition и на основе возвращаемого результата у 1 из следующих
    • Если черная область была нажата - не делать ничего, нажмите событие было создано в ActionScript
    • Если фон нажал - мирского скрыть текущий элемент, и воссоздают нажмите в JavaScript

Javascript

$('#event-eater').click(function(evt) { 
    var posX = $(this).offset().left, posY = $(this).offset().top; 
    var x = Math.abs(Math.round(evt.pageX - posX)); 
    var y = Math.abs(Math.round(evt.pageY - posY)); 
    var result = "["+x+", "+y+"]"; 
    if(document['flashInterface'].ClickPosition(result)=="true"){ 
     $('#event-eater').css({display:'none'}); 
     starter = document.elementFromPoint(evt.clientX, evt.clientY); 
     $(starter).click(); 
     $('#event-eater').css({display:''}); 
    }; 
}); 

Actionscript

package 
{ 
    import fl.events.ColorPickerEvent; 
    import flash.display.MovieClip; 
    import flash.external.ExternalInterface; 
    public class Main extends MovieClip { 
     //set this variable true if background was clicked last, false otherwise 
     var wasBackgroundClickedLast:Boolean = new Boolean(true) 
     public function Main() { 
      //allows JavaScript to access the ClickPosition() function. 
      ExternalInterface.addCallback("ClickPosition", clickPosition); 
     } 
     public function clickPosition(value:String):String{ 
      var va= str.split(","); 
      simulateClick(Number(va[0]),Number(va[1])); 
      return wasBackgroundClicked.toString(); 
     } 
     public function simulateClick(x:Number, y:Number):void 
     { 
      var objects:Array = stage.getObjectsUnderPoint(new Point(x, y)); 
      var target:DisplayObject; 
      while(target = objects.pop()){if(target is InteractiveObject){ break; }} 
      if(target !== null) 
      { 
       var local:Point = target.globalToLocal(new Point(x, y)); 
       var e:MouseEvent = new MouseEvent(
        MouseEvent.CLICK, true, false, local.x, local.y); 
       target.dispatchEvent(e); 
      } 
     } 
    } 
} 

Small demo: Javascript eventeater с массивом кнопок под ним.

+0

Обратите внимание, что это не проверено, но я уверен, что он должен работать. Вы хотите добавить поток sleep 0.1s после simulateClick с стороны ActionScript. Вам все равно нужно добавить ** wasBackgroundClickedLast = false **, когда щелкнул черный круг и ** ... = true **, если был щелкнут фоновый рисунок. – Margus

+0

Пример использования связи между javascript и actionscript: http://code.tutsplus.com/tutorials/quick-tip-how-to-communicate-between-flash-and-javascript--active-3370 – Margus

+0

Это может быть проще для размещения HTML внутри флеш-памяти, но может и нет. – Margus