【问题标题】:Titanium.Media.AudioPlayer : Can't I have "Change" event handler together with "Progress" event handler?Titanium.Media.AudioPlayer:我不能将“更改”事件处理程序与“进度”事件处理程序一起使用吗?
【发布时间】:2015-12-12 22:13:56
【问题描述】:
var player = Titanium.Media.createAudioPlayer({
    url : '101.mp3',
    allowBackground : false
});

var eventHandler = function(e) {
    Ti.API.info("Handler:" + JSON.stringify(e, null, 4));
};

Ti.API.info("Setting up event handlers");
player.addEventListener('progress', eventHandler);
// player.addEventListener('change', eventHandler);

Ti.API.info("Starting player...");
player.play();

结果是:

[INFO] :   Setting up event handlers
[INFO] :   Starting player...
[INFO] :   Handler:{
[INFO] :       "progress": 927.4149659863946,
[INFO] :       "bubbles": true,
[INFO] :       "type": "progress",
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }  
[INFO] :   Handler:{
[INFO] :       "progress": 1926.984126984127,
[INFO] :       "bubbles": true,
[INFO] :       "type": "progress",  
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }
[INFO] :   Handler:{
[INFO] :       "progress": 2924.9206349206347,
[INFO] :       "bubbles": true,
[INFO] :       "type": "progress",
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }
[INFO] :   Handler:{
[INFO] :       "progress": 3926.7346938775513,
[INFO] :       "bubbles": true,
[INFO] :       "type": "progress",
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }

所以,显然我得到了“进度”事件......

现在,如果我取消注释第二个 addEventListener 调用:

player.addEventListener('progress', eventHandler);
player.addEventListener('change', eventHandler);

我明白了:

[INFO] :   Setting up event handlers
[INFO] :   Starting player...
[INFO] :   Handler:{
[INFO] :       "state": 1,
[INFO] :       "description": "starting",
[INFO] :       "bubbles": true,
[INFO] :       "type": "change",
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }
[INFO] :   Handler:{
[INFO] :       "state": 2,
[INFO] :       "description": "waiting_for_data",
[INFO] :       "bubbles": true,
[INFO] :       "type": "change",
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }
[INFO] :   Handler:{
[INFO] :       "state": 3,
[INFO] :       "description": "waiting_for_queue",
[INFO] :       "bubbles": true,
[INFO] :       "type": "change",
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }
[INFO] :   Handler:{
[INFO] :       "state": 4,
[INFO] :       "description": "playing",
[INFO] :       "bubbles": true,
[INFO] :       "type": "change",
[INFO] :       "source": {},
[INFO] :       "cancelBubble": false
[INFO] :   }

没有更多的“进展”事件?

谁能解释一下?

【问题讨论】:

    标签: javascript titanium titanium-mobile


    【解决方案1】:

    定义两个事件处理程序并为每个事件添加一个。 通常,您处理音频进度事件和更改事件的方式也非常不同。

       var onProgressHandler = function(e) {
            Ti.API.info("Progress Handler:" + JSON.stringify(e, null, 4));
        };
    
        var onChangeHandler = function(e) {
            Ti.API.info("Change Handler:" + JSON.stringify(e, null, 4));
        };
    
        Ti.API.info("Setting up event handlers");
        player.addEventListener('progress', onProgressHandler);
        player.addEventListener('change', onChangeHandler);
    

    【讨论】:

    • 是的,我对这两个事件都使用了一个处理程序,以使这个示例更简短(呃)。但我不明白为什么在这种情况下为这两个事件调用相同的事件处理程序会产生丝毫不同?我会尝试它,但如果它改变了任何东西,那么我深深误解了 Javascript 语言.....
    【解决方案2】:

    虽然 AudioPlayer 和 Window 或任何其他视图共享相同的 code 来管理侦听器,但我无法通过以下方式重现:

    win = Ti.UI.createWindow();
    win.addEventListener('singletap', listen);
    win.addEventListener('doubletap', listen);
    win.addEventListener('longpress', listen);
    function listen(e) {
      console.log(e.type);
    }
    win.open();
    

    但是,由于您似乎有很好的可重现用例,请务必创建 JIRA 票证,以便我们解决此问题。

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多