2013-07-08 64 views
0

我有一個Javascript插件,在這個插件中有很多功能。我想要的是從ActionScript 3代碼調用$.Repro.barraSonido函數。該插件是這樣的:我如何調用Javascript中的插件中的函數,來自ActionScript 3

(function ($) { 
    $.fn.Repro = function() { 
     var parametros = { 
      ejecucion: false, 
      lista: null, 
      audio: 0 
     }; 
     var tposic = true; 
     $.Repro = function (opciones) { 
      $.ropc = $.extend({}, parametros, opciones); 

      var Metodos = { 
       Iniciar: function() { 
        $('#opc_player').attr('unselectable', 'on').css('user-select', 'none').on('selectstart', false); 
        $.Repro.barra(); 
        $.Repro.volumen(); 
        $.Repro.movPlaylist(); 
        $('#btn_play').on('click', $.Repro.musc_play); 
       } 
      }; 
      return Metodos; 
     }; 
     $.Repro.musc_play = function() { 
      if (!swf('jrepro').ispausa()) $(this).removeClass('play').addClass('parar'); 
      else $(this).removeClass('parar').addClass('play'); 
      swf('jrepro').pausa(); 
      return false; 
     }; 
     $.Repro.autoplay = function() { 
      var e = $('.lista_musica').find('.selecc'); 
      if (e.length == 0) return ''; 
       $.ropc.lista = e.parent(); 
       $('#T-tema').text(e.find('.artista').html()); 
       $('#T-artista').text(e.find('.tema').html()); 
       return new Array(s['s' + e.attr('name')], e.attr('aud')); 
      } 
     }; 
     $.Repro.play = function (c) { 
      if ($.ropc.lista) { 
       var el = $.ropc.lista.find("li"); 
       if (c != undefined) { 
        $.ropc.audio = c; 
       } else if ($('#btn_aleatorio').hasClass('aleatorioS') && el.length > 1) { 
        var sg = true; 
        while (sg) { 
         var rnd = Math.floor(Math.random() * el.length); 
         if (rnd != $.ropc.audio) sg = false; 
        } 
        $.ropc.audio = rnd; 
       } else if ($('#btn_repetir').hasClass('repetirS')) { 
        $.ropc.audio = $.ropc.audio; 
       } else $.ropc.audio = $.ropc.audio >= (el.length - 1) ? 0 : ($.ropc.audio + 1); 
       var eil = el.eq($.ropc.audio); 
       el.removeClass('selecc'); 
       eil.addClass('selecc'); 
       $('#T-tema').text(eil.find('.tema').html()); 
       $('#T-artista').text(eil.find('.artista').html()); 
       swf('jrepro').r(s['s' + eil.attr('name')], eil.attr('aud')); 
       if (swf('jrepro').ispausa()) $('#btn_play').removeClass('play').addClass('parar'); 
       else $('#btn_play').removeClass('parar').addClass('play'); 
      } 
     }; 
     $.Repro.barraSonido = function (n, total, n2, total2) { 
      $.Repro.cargaSonido(n2, total2); 
      if (n <= total) { 
       var i_tiempo = (n/1000); 
       var m = Math.floor(i_tiempo/60), 
        s = Math.ceil(i_tiempo % 60); 
       $("#tinicial").html((m > 9 ? m : 0 + '' + m) + ':' + (s > 9 ? s : 0 + '' + s)); 
       var t_total = (total/1000), 
        fm = Math.floor(t_total/60), 
        fs = Math.ceil(t_total % 60); 
       $("#tfinal").html((fm > 9 ? fm : 0 + '' + fm) + ':' + (fs > 9 ? fs : 0 + '' + fs)); 
       if (total > 0 && tposic) { 
        var pos = Math.round((Math.round(n) * $('#precarga').width())/(total)); 
        $('.bar_pr').css('width', pos + 'px'); 
        $('#player_puntero').css('left', pos + 'px'); 
       } 
      } 
     }; 
     $.Repro.cargaSonido = function (n, total) { 
      if (total > 0 && $('#precarga').width() < 290) { 
       var posCarg = Math.round((n * 290)/total); 
       $('#precarga').css({width: posCarg}, 500); 
      } 
     }; 
     $.Repro.barra = function() { 
      $('.bar_fon').slider({ 
        max: 100, 
        range: "min", 
        slide: function (a, c) { 
         tposic = false; 
         $('.bar_pr').css('width', c.value + '%'); 
        }, 
        stop: function (a, c) { 
         swf('jrepro').tie(parseInt($('#player_puntero').css('left')), $('#precarga').width()); 
         tposic = true; 
        } 
       }); 
     }; 
     $.Repro.movPlaylist = function() {}; 
     return $.Repro; 
    }(); 
})(jQuery); 

它不工作,我把SWF文件執行以下操作:

import flash.external.ExternalInterface; 

function call_javascript(evt:MouseEvent):void { 
    ExternalInterface.call("$.Reproductor.barraSonido");//Even with "()" 
} 

js_btn.addEventListener(MouseEvent.MOUSE_UP, call_javascript); 

出於測試目的,在功能$.Reproductor.barraSonido,我加alert("hola");

的HTML文件是:

<script type="text/javascript"> 
    //Here is the plugin 
</script> 

<object width="300" height="150"> 
<param name="movie" value="player.swf"> 
<embed src="player.swf" width="300" height="150"> 
</embed> 
</object> 

回答

0

您可以使用AS3的External Interface類Javascript來溝通(包括往返)。你可以在這裏閱讀更多關於External Interface

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

您的需求,一些諸如:

if(ExternalInterface.available) ExternalInterface.call('$.Repro. barraSonido', ...arguments); 

會調用該函數。您需要將上例中的...arguments替換爲您想要傳遞給barraSonido函數的參數。

+0

非常感謝你,我忘了添加jquery.min.js – user2495207

相關問題