@@ -65,6 +65,56 @@ APlayer.prototype.init = function () {
6565 if ( this . option . autoplay ) {
6666 this . play ( ) ;
6767 }
68+
69+ this . thumb = this . option . element . getElementsByClassName ( 'aplayer-thumb' ) [ 0 ] ;
70+ this . bar = this . option . element . getElementsByClassName ( 'aplayer-bar' ) [ 0 ] ;
71+ var barWidth ;
72+
73+ this . bar . addEventListener ( 'click' , function ( event ) {
74+ var e = event || window . event ;
75+ barWidth = _self . bar . clientWidth ;
76+ var percentage = ( e . clientX - getElementLeft ( _self . bar ) ) / barWidth ;
77+ _self . updateBar . call ( _self , 'played' , percentage ) ;
78+ _self . option . element . getElementsByClassName ( 'aplayer-ptime' ) [ 0 ] . innerHTML = _self . secondToTime ( percentage * _self . audio . duration ) ;
79+ _self . audio . currentTime = parseFloat ( _self . playedBar . style . width ) / 100 * _self . audio . duration ;
80+ } ) ;
81+
82+ this . thumb . addEventListener ( 'mousedown' , function ( event ) {
83+ var e = event || window . event ;
84+ barWidth = _self . bar . clientWidth ;
85+ clearInterval ( _self . playedTime ) ;
86+ document . addEventListener ( 'mousemove' , thumbMove ) ;
87+ document . addEventListener ( 'mouseup' , thumbUp ) ;
88+ } ) ;
89+
90+ function thumbMove ( event ) {
91+ var e = event || window . event ;
92+ var percentage = ( e . clientX - getElementLeft ( _self . bar ) ) / barWidth ;
93+ percentage = percentage > 0 ? percentage : 0 ;
94+ percentage = percentage < 1 ? percentage : 1 ;
95+ _self . updateBar . call ( _self , 'played' , percentage ) ;
96+ _self . option . element . getElementsByClassName ( 'aplayer-ptime' ) [ 0 ] . innerHTML = _self . secondToTime ( percentage * _self . audio . duration ) ;
97+ }
98+
99+ function thumbUp ( ) {
100+ document . removeEventListener ( 'mouseup' , thumbUp ) ;
101+ document . removeEventListener ( 'mousemove' , thumbMove ) ;
102+ _self . audio . currentTime = parseFloat ( _self . playedBar . style . width ) / 100 * _self . audio . duration ;
103+ _self . playedTime = setInterval ( function ( ) {
104+ _self . updateBar . call ( _self , 'played' , _self . audio . currentTime / _self . audio . duration ) ;
105+ _self . option . element . getElementsByClassName ( 'aplayer-ptime' ) [ 0 ] . innerHTML = _self . secondToTime ( _self . audio . currentTime ) ;
106+ } , 100 ) ;
107+ }
108+
109+ function getElementLeft ( element ) {
110+ var actualLeft = element . offsetLeft ;
111+ var current = element . offsetParent ;
112+ while ( current !== null ) {
113+ actualLeft += current . offsetLeft ;
114+ current = current . offsetParent ;
115+ }
116+ return actualLeft ;
117+ }
68118} ;
69119
70120APlayer . prototype . play = function ( ) {
@@ -86,6 +136,8 @@ APlayer.prototype.pause = function () {
86136} ;
87137
88138APlayer . prototype . updateBar = function ( type , percentage ) {
139+ percentage = percentage > 0 ? percentage : 0 ;
140+ percentage = percentage < 1 ? percentage : 1 ;
89141 this [ type + 'Bar' ] . style . width = percentage * 100 + '%' ;
90142} ;
91143
0 commit comments