首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Amplitude.js继续下一页的歌曲

用Amplitude.js继续下一页的歌曲
EN

Stack Overflow用户
提问于 2018-06-28 11:14:04
回答 2查看 991关注 0票数 0

我使用Amplitude.js来播放动态歌曲。服务器端脚本是php。我的目标是检查是否有任何歌曲正在播放,如果比之前有,那么保存该歌曲的索引和当前位置(百分比)。然后在下一页,我必须从同样的位置继续这首歌。到目前为止,我已经成功地在下一页播放了同一首歌,但它从一开始就在播放。

在这里,$feat是创建如下所示的数组:

代码语言:javascript
复制
$featured = array();
        foreach ($all as $key => $value) {
           array_push($featured, array(
                "id" => $value['audio_id'],
                "name" => $value['audio_name'],
                "artist" => $value['audio_artist'],
                "album" => $value['product_name'],
                "url" => l($value['audio_file_path'].$value['audio_file']),
                "cover_art_url" =($value['product_image_path'].$value['product_image']),
           ));
        }

我的javascript代码将振幅js降低为:

代码语言:javascript
复制
<script>
Amplitude.setDebug( true );
let _songs = JSON.parse('<?=$feat?>');
Amplitude.init({
  "songs":_songs,
});
</script>

在每一页的变化中,我保存了歌曲当前索引和播放歌曲的当前百分比。工作很好。Home/ song _stats将在会话中保存歌曲信息

代码语言:javascript
复制
<script>
    $(window).on("beforeunload", function() {
    song_percent =  Amplitude.getSongPlayedPercentage();
    song_index = Amplitude.getActiveIndex();

    $.ajax({
      type: "POST",
      url: "<?=g('base_url')?>Home/song_stats", 
      data:  "song_percent="+song_percent+"&song_index="+song_index,
      dataType: "json"
    });
    return false;    
    });

</script>

这个javascript代码正在播放这首歌,如果有任何会话数据可以继续这首歌,它将继续这首歌。

代码语言:javascript
复制
<script>
$(window).load(function(){

  function playmysongs(_index){
  $('div[amplitude-song-index="'+_index+'"]').click();
}


  var appender = '';
  for(var i =0;i<_songs.length;i++){
    appender+='<div class="rixinside-list"><a onclick="playmysongs('+i+')"><span class="album_img"><img src="'+_songs[i].cover_art_url+'" class="img-responsive"/></span><span class="album_name">'+_songs[i].album+'<span class="album_artist">'+_songs[i].artist+'</span></span></a></div>';
  }
$('#playlist-container .rixplaylist').append(appender);

  //cont song
     $.ajax({
      type: "POST",
      url: "<?=g('base_url')?>Home/continue_song",
      data:  "",
      dataType: "json",
      success: function(response){
        playmysongs(response.song_index);
        Amplitude.setSongPlayedPercentage(response.song_percent);
      }
    });
    return false;  
    //cont song end
});


$('#playlist-container').click(function(){
  $('.rixplaylist').toggle();
});
$('#wishlist-container i').click(function(){
  $(this).toggleClass('like');
});

虽然"response.song_percent“显示的值是正确的,但下面的行不起作用。任何帮助都将不胜感激。Amplitude.setSongPlayedPercentage(response.song_percent);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-29 19:54:10

使用AmplitudeJS 3.3或更高版本有几个选项。

首先,在导航之前,我会将正在播放的歌曲的当前位置保存到本地存储区或cookie中。如果您想保存位置服务器端,您也可以这样做。如果您在Javascript中执行所有操作,本地存储可能会更容易一些。

在加载页面时,在获得歌曲播放百分比(或当前时间)之后,您有两个选项之一。

1.使用Amplitude.setSongPlayedPercentage(百分比).

这样做是将当前正在播放的歌曲设置为已定义的百分比。关键是当前。现在,如果用户跳到歌曲3,转到下一页,将歌曲播放百分比设置为35,它将执行数组中的第一首歌曲,这将是错误的歌曲。在执行Amplitude.setSongPlayedPercentage之前,必须将Amplitude.init()方法中的start_song键设置为用户播放的歌曲的索引。然后您可以运行Amplitude.setSongPlayedPercentage(百分比),它将正常工作。

2.使用Amplitude.skipTo(秒,索引);

这个方法有点新,但不那么复杂。您需要做的是将歌曲中的秒保存到本地存储、cookie中,或者与歌曲的索引一起使用。加载页面时,在初始化AmplitudeJS之后,可以运行Amplitude.skipTo(秒数,索引)。秒是用户离歌曲有多远,索引是歌曲数组中歌曲的索引。从那以后就会恢复。

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2018-06-29 11:17:27

可能存在一个异步问题:在设置百分比之前,尝试用代码本身替换对"playmysongs“函数的调用,或者在设置百分比值之前添加200的超时值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51081488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档