Вход Регистрация
Файл: js/al/html5audio.js
Строк: 244
<?php
var html5audio = {
  
audio_prSliderW: 14,
  
audio_volLineW: 41,

  
playPause: function() {
    var 
p = ge('the_audio');
    if (!
p) {
      
html5audio.audio_player_id = 0;
      return;
    } else {
      if (
isNaN(p.duration)) {
        
p.src = getUrl();
        
p.load();
      }

      if (
p.paused) {
        
p.play();
        
audioPlayer.change(html5audio.audio_player_id, 'play');
      } else {
        
p.pause();
        
audioPlayer.change(html5audio.audio_player_id, 'pause');
      }
    }
  },

  
stopHTML5Audio: function() {
    
html5audio.audio_player_id = 0;
    var 
p = ge('the_audio');
    if (!
p) return;
    var 
pParent = p.parentNode;
    var 
pTable = p.nextSibling;
    
pParent.removeChild(p);
    
pParent.removeChild(pTable);
    
pParent.parentNode.removeChild(pParent);

    
removeEvent(document, 'mouseup', html5audio.docMouseUp);
    
removeEvent(document, 'mousemove', html5audio.docMouseMove);
  },

  
onErr: function(url, e) {
    
topError('Audio loading error: ' + e.target.error.code, {dt: -1, type: 101, url: url, code: e.target.error.code});
  },

  
defX: function(e) {
    var 
hscroll = (browser.ipad || browser.iphone4 || browser.ipod4) ? 0 : (document.all ? document.scrollLeft : window.pageXOffset);
    return 
intval(e.clientX + hscroll);
  },

  
prDrag: function(div) {
    
html5audio.audio_moveState = 1;
    
fadeTo(ge('audio_pr_slider'), 200, 0.5);
  },

  
volDrag: function(div) {
    
html5audio.audio_moveState = 2;
  },

  
prClick: function() {
    
html5audio.onPrMove();
    
html5audio.prDrag();
  },

  
volClick: function() {
    
html5audio.onVolMove();
    
html5audio.volDrag();
  },

  
onPrMove: function() {
    var 
p = ge('the_audio');
    if ((
browser.ipad || browser.iphone4 || browser.ipod4) && p.readyState != HTMLMediaElement.HAVE_FUTURE_DATA && p.readyState != HTMLMediaElement.HAVE_ENOUGH_DATA){
      return;
    }
    if (
p.paused) p.play();
    var 
e = window.event;
    var 
xy = getXY(ge('audio_progress_line'));
    
html5audio.audio_curPrX = html5audio.defX(e) - xy[0] - 7;
    if (
html5audio.audio_curPrX < 0) html5audio.audio_curPrX = 0;
    if (
html5audio.audio_curPrX > html5audio.audio_prLineW) html5audio.audio_curPrX = html5audio.audio_prLineW;
    
ge('audio_pr_slider').style.left = html5audio.audio_curPrX + 'px';
    
html5audio.updTimeEx();
  },

  
updTimeEx: function() {
    var 
p = ge('the_audio');
    if (
p && !isNaN(p.duration)) {
      try {
        
p.currentTime = p.startTime + (p.duration * html5audio.audio_curPrX) / html5audio.audio_prLineW;
      } catch(
e) {
        
html5audio.initHTML5Audio(html5audio.audio_player_id);
      };
    }
    
html5audio.updTime();
  },

  
onVolMove: function() {
    var 
e = window.event;
    var 
xy = getXY(ge('audio_volume_line'));
    
html5audio.audio_curVolX = html5audio.defX(e) - xy[0] - 3;
    if (
html5audio.audio_curVolX < 0) html5audio.audio_curVolX = 0;
    if (
html5audio.audio_curVolX > html5audio.audio_volLineW) html5audio.audio_curVolX = html5audio.audio_volLineW;
    
html5audio.updVol(false);
  },

  
updVol: function(init) {
    if (!
ge('audio_vol_slider')) return;
    var 
vol = intval(html5audio.audio_curVolX) / html5audio.audio_volLineW;
    
ge('audio_vol_slider').style.left = html5audio.audio_curVolX + 'px';
    
ge('audio_volume_line').style.opacity = 0.5 + 0.5 * vol;
    
ge('the_audio').volume = vol;
    if (!
init) audioPlayer.change(html5audio.audio_player_id, 'volume', intval(100*vol));
  },

  
updTime: function() {
    var 
p = ge('the_audio');
    if (
p && !isNaN(p.duration) && p.duration > 0 && html5audio.audio_moveState != 1) {
      
ge('audio_pr_slider').style.left = ((html5audio.audio_prLineW * (p.currentTime - p.startTime)) / p.duration) + 'px';
      if (
p.duration - p.currentTime <= 1){
        
p.pause();
        
html5audio.onEnded();
      }
    }
  },

  
onPlay: function() {
    
audioPlayer.change(html5audio.audio_player_id, 'play');
    
fadeTo(ge('audio_pr_slider'), 200, 1);
  },

  
onPause: function() {
    if (
html5audio.audio_player_id) {
      
audioPlayer.change(html5audio.audio_player_id, 'pause');
      
fadeTo(ge('audio_pr_slider'), 200, 0.5);
    }
  },

  
onSuspend: function() {
    
setStyle(ge('audio_progress_line'), {width:'100%'});
  },

  
onPlaying: function() {
    if (
html5audio.audio_curPrX > 0) {
      
html5audio.updTimeEx();
    }
    
setInterval(html5audio.updTime, 1000);
  },

  
onCanPlay: function() {
    if (
ge('the_audio')) setTimeout(function(){ge('the_audio').play();}, 1000);
  },

  
onEnded: function() {
    if (
html5audio.audio_moveState == 0){
      
audioPlayer.nextTrack();
    }
  },

  
getUrl: function() {
    var 
data = ge('audio_info' + html5audio.audio_player_id).value.split(',');
    return 
data[0];
  },

  
touchHandler: function(e) {
    var 
touches = e.changedTouches,
      
first = touches[0],
      
type = '';

    var 
p = ge('the_audio');
    switch(
e.type)
    {
      case 
'touchstart': type = 'mousedown'; break;
      case 
'touchmove':  type = 'mousemove'; break;
      case 
'touchend':   type = 'mouseup'; break;
      default: return;
    }

    var 
simulatedEvent = document.createEvent('MouseEvent');
    
simulatedEvent.initMouseEvent(type, true, true, window, 1,
      
first.screenX, first.screenY,
      
first.clientX, first.clientY, false,
      
false, false, false, 0, null);

    
first.target.dispatchEvent(simulatedEvent);
    if (
e.target == ge('audio_white_line') || e.target == ge('audio_progress_line') || e.target == ge('audio_pr_slider')) {
      
e.preventDefault();
    }
  },

  
startHTML5Audio: function() {
    
html5audio.audio_curPrX = 0;
    
html5audio.audio_prLineW = getSize(ge('audio_white_line'))[0] - html5audio.audio_prSliderW;
    
html5audio.updVol(true);

    var 
p = ge('the_audio'), src = html5audio.getUrl();
    
p.src = src;
    
p.load();

    
p.volume = html5audio.audio_curVolX / html5audio.audio_volLineW;
    
addEvent(p, 'canplay', html5audio.onCanPlay);
    
addEvent(p, 'playing', html5audio.onPlaying);
    
addEvent(p, 'play', html5audio.onPlay);
    
addEvent(p, 'pause', html5audio.onPause);
    
addEvent(p, 'onerror', html5audio.onErr.pbind(src));
    
addEvent(p, 'suspend', html5audio.onSuspend);

    if (
browser.ipad || browser.iphone4 || browser.ipod4) {
      
document.addEventListener('touchstart', html5audio.touchHandler, true);
      
document.addEventListener('touchmove', html5audio.touchHandler, true);
      
document.addEventListener('touchend', html5audio.touchHandler, true);
    }

    
setTimeout(function(){p.play();}, 100);
  },

  
audioHTML5Code: function() {
    var 
ypos = (browser.ipad || browser.iphone4 || browser.ipod4) ? '-12' : '5';
    var 
res = '
<div id="audio_player" style="top:' 
+ ypos + 'px">
  <audio id="the_audio"></audio>
  <table width="100%" border="0" cellpadding="0" cellspacing="0">
    <tr valign="top">
      <td style="width:100%;padding:0px 0px 0px 0px">
        <div id="audio_white_line" onmousedown="html5audio.prClick(this);"></div>
        <div id="audio_progress_line" onmousedown="html5audio.prClick(this);">
          <div id="audio_pr_slider" onmousedown="html5audio.prDrag(this);"></div>
        </div>
      </td>'
;

    if (!
browser.ipad && !browser.iphone4 && !browser.ipod4){
      
res += '
      <td style="padding:0px 0px 0px 10px"></td>
      <td style="padding:1px 0px 0px 0px">
        <div id="audio_white_volume_line" onmousedown="html5audio.volClick(this);"></div>
        <div id="audio_volume_line" onmousedown="html5audio.volClick(this);">
          <div id="audio_vol_slider" style="left:' 
+ html5audio.audio_curVolX + 'px;" onmousedown="html5audio.volDrag(this);"></div>
        </div>
      </td>'
;
    }

    
res += '
    </tr>
  </table>
</div>'
;
    return 
res;
  },

  
initHTML5Audio: function(id) {

    
addEvent(document, 'mouseup', html5audio.docMouseUp);
    
addEvent(document, 'mousemove', html5audio.docMouseMove);

    
html5audio.audio_moveState = 0;
    
html5audio.audio_player_id = id;
    
audioPlayer.change(id, 'init');
    
audioPlayer.initVolume();
    var 
vv = audioPlayer.volume / 100;
    
html5audio.audio_curVolX = html5audio.audio_wasVolX = intval(html5audio.audio_volLineW*vv);

    var 
p = ge('player' + id);
    
p.innerHTML = html5audio.audioHTML5Code();
    
p.style.padding = '0px';
    
show(p);

    
setTimeout(html5audio.startHTML5Audio, 200);
  },

  
docMouseUp: function() {
    if (
html5audio.audio_moveState == 1 && !ge('the_audio').paused)
      
fadeTo(ge('audio_pr_slider'), 200, 1);
    
html5audio.audio_moveState = 0;
  },

  
docMouseMove: function() {
    if (
html5audio.audio_moveState == 1) { html5audio.onPrMove(); } else
    if (
html5audio.audio_moveState == 2) { html5audio.onVolMove(); }
  }
}

try{
stManager.done('html5audio.js');}catch(e){}
?>
Онлайн: 2
Реклама