虾米音乐播放器
虾米音乐播放器 用来做日志的 背景音乐 还是不错的 [呲牙/]
自己试着写了一个播放器界面,虽然没有华丽的界面,但是该有的基本功能都有,只能作为单曲播放器用用,另外也写了一个 单独的 JS 文件,播放 虾米音乐用的
安慰下自己 哥哥写的不是 界面, 是功能 [阴险/]
具体效果 看下面吧
轻轻的放下
去大理
我的歌声里
另外本站加上 背景图片,B格还是挺高的[坏笑/]
现在本站已经不在用着款播放器了
具体效果自己那下面的代码测试吧 (播放器 不支持列表 但是可以 通过定义多个链接 不妨不同歌曲, 代码需 jQuery.js 与 HTML5 Audio 的 支持)
首先是 JS 代码:
HTML 代码结构:
自己试着写了一个播放器界面,虽然没有华丽的界面,但是该有的基本功能都有,只能作为单曲播放器用用,另外也写了一个 单独的 JS 文件,播放 虾米音乐用的
安慰下自己 哥哥写的不是 界面, 是功能 [阴险/]
具体效果 看下面吧
轻轻的放下
去大理
我的歌声里
另外本站加上 背景图片,B格还是挺高的[坏笑/]
现在本站已经不在用着款播放器了
具体效果自己那下面的代码测试吧 (播放器 不支持列表 但是可以 通过定义多个链接 不妨不同歌曲, 代码需 jQuery.js 与 HTML5 Audio 的 支持)
首先是 JS 代码:
/** * 虾米音乐 播放器 * 单曲版 * * 20141228 **/ var audio = new Audio(), xiami_list = {}, $press, $currentTime, timeDrag; var jaPlayer = { curID: false, _init: false, playBar: false, // 播放指定 ID 音乐 (虾米 ID) playXiani: function(id) { if (typeof(xiami_list[id]) == "undefined") { jaPlayer._getSong(id, true) } else { if (jaPlayer.curID != id) { jaPlayer.curID = id; jaPlayer.setSongInfo(xiami_list[id]); audio.src = xiami_list[id].location; audio.play() } else { jaPlayer.setSongInfo(xiami_list[id]); jaPlayer.paused() } } }, // 进度条 拖放操作 timePress: function(x) { var progress = $(".progress"); var maxduration = audio.duration; var position = x - progress.offset().left; var percentage = 100 * position / progress.width(); if (percentage > 100) { percentage = 100 } if (percentage < 0) { percentage = 0 } $(".timeBar").css("width", percentage + "%"); audio.currentTime = maxduration * percentage / 100 }, // 时间 与 进度条 更新 timeUpdate: function() { if (!jaPlayer.playBar) { return } var currentPos = audio.currentTime, maxduration = audio.duration, perc = 100 * currentPos / maxduration; $press.css("width", perc + "%"); $currentTime.text(jaPlayer.timeFormat(currentPos)) }, // 播放暂停 paused: function() { if (audio.paused || audio.ended) { audio.play(); $(".ja-player .paused").addClass("pause").removeClass("play") } else { audio.pause(); $(".ja-player .paused").addClass("play").removeClass("pause") } }, // 设置 播放器 信息 setSongInfo: function(j) { $(".ja-player img.bg").attr("src", j.pic); $(".song-info .title").text(j.title); $(".song-info .album").text(j.album_name); $(".song-info .author").text(j.artist); $(".song-info .time .length").text(jaPlayer.timeFormat(j.length)) }, // 格式化时间为 --:-- timeFormat: function(seconds) { var m = Math.floor(seconds / 60) < 10 ? "0" + Math.floor(seconds / 60) : Math.floor(seconds / 60); var s = Math.floor(seconds - (m * 60)) < 10 ? "0" + Math.floor(seconds - (m * 60)) : Math.floor(seconds - (m * 60)); return m + ":" + s }, // 解密虾米链接 xiamideCode: function(l) { var result = [], url = ""; var line, rows, extra; l = l.trim(); if (l === "") { return "" } line = Number(l[0]); rows = Math.floor((l.length - 1) / line); extra = (l.length - 1) % line; l = l.slice(1); for (i = 0; i < extra; i++) { result.push(l.slice((rows + 1) * i, (rows + 1) * (i + 1))) } for (i = 0; i < line - extra; i++) { result.push(l.slice((rows + 1) * extra + (rows * i), (rows + 1) * extra + (rows * i) + rows)) } for (i = 0; i < rows + 1; i++) { for (j = 0; j < rows; j++) { if (result[j] && result[j][i]) { url = url + result[j][i] } } } url = unescape(url).replace(/\^/g, "0"); return url }, // 获取歌曲信息 _getSong: function(id, isPlay) { if (typeof(xiami_list[id]) == "undefined") { $.getJSON("http://www.xiami.com/song/playlist/id/" + id + "/cat/json?callback=?", function(j) { id = j.data.trackList[0].song_id; xiami_list[id] = j.data.trackList[0]; xiami_list[id].location = jaPlayer.xiamideCode(xiami_list[id].location); xiami_list[id].pic = xiami_list[id].pic.replace(/\_\d\./, "_5."); jaPlayer.curID = id; audio.src = xiami_list[id].location; if (typeof isPlay != "undefined" && isPlay == true) { audio.src = xiami_list[id].location; audio.play(); $(".ja-player .paused").addClass("pause").removeClass("play") } jaPlayer.setSongInfo(xiami_list[id]) }) } }, // 初始化播放器 init: function() { if (!jaPlayer._init) { jaPlayer._init = true; audio.addEventListener("timeupdate", jaPlayer.timeUpdate); $(document).on("click", ".ja-player .paused", function(e) { jaPlayer.paused() }).on("click", "[data-xia]", function(e) { jaPlayer.playXiani($(this).data("xia")); return false }); html = '<img class="bg" /><div class="paused"></div><div class="song-info"><span class="title"></span><br><span class="author"></span><span class="album"></span><br><span class="time"><span class="current">00:00</span> /<span class="length">00:00</span></span></div><div class="progress"><span class="bufferBar"></span><span class="timeBar"></span></div>'; if (typeof($(".ja-player")[0]) != "undefined") { jaPlayer.playBar = true; $(".ja-player").html(html) } $press = $(".timeBar"), $currentTime = $(".song-info .time .current"); if (typeof($("[data-xia]")[0]) != "undefined") { if (typeof($("[auto][data-xia]")[0]) != "undefined") { $this = $("[auto][data-xia]:first") } else { $this = $("[data-xia]:first") } id = jaPlayer._getSong($this.data("xia"), (typeof $this.attr("auto") == "undefined" ? false: true)) } } } }; // 进度条 拖放 事件 $(document) .on("mousedown", ".progress", function(e) { timeDrag = true; jaPlayer.timePress(e.pageX) }) .on("mouseup", function(e) { if (timeDrag) { timeDrag = false; jaPlayer.timePress(e.pageX); } }) .on("mousemove", function(e) { if (timeDrag) jaPlayer.timePress(e.pageX); }); // 加载播放器 jaPlayer.init();接着来的是 播放器的 CSS 样式:
/** 20141228 **/ .ja-player { width: 200px; height: 200px; position: relative; background: #eee; color: #fff; box-shadow: 0 0 15px rgba(0,0,0,0.5); margin: 50px auto 0; font-family: 'Microsoft YaHei','STHeiti','SimHei','SimSun'; font-size: 14px; font-weight: 700; line-height: 16px } .ja-player img.bg,.ja-player .song-info { position: absolute; bottom: 20px; left: 0; padding: 3px } .ja-player img.bg { width: 100%; height: 100%; border: 0; margin: 0; padding: 0; bottom: 0 } .ja-player .paused { position: absolute; bottom: 50%; left: 50%; width: 30px; height: 30px; margin-top: -10px; margin-left: -17px; cursor: pointer; padding: 2px; color: #fff } .ja-player .-paused.play,.ja-player .-paused.pause { box-shadow: 0 0 15px #fff,0 0 15px #fff,inset 0 0 10px #fff,inset 0 0 10px #fff; border-radius: 50%; border: 3px solid rgba(255,255,255,0.6); background: rgba(100,100,100,0.6) } .ja-player .song-info>span { color: #fff; margin-left: 3px; text-shadow: 0 0 5px rgba(0,0,0,0.4),1px 1px 5px rgba(0,0,0,0.4),-1px -1px 5px rgba(0,0,0,0.4) } .ja-player .song-info p { margin: 3px; text-align: center } .progress { position: absolute; width: 190px; height: 6px; padding: 2px; margin: 4px; top: 100%; margin-top: -15px; cursor: pointer; background: rgba(0,0,0,0.4); box-shadow: 0 1px 0 rgba(255,255,255,0.1),inset 0 1px 1px black; border-radius: 10px } .progress span { height: 100%; position: absolute; top: 0; left: 0; background: rgba(255,255,255,0.4); display: block; border-radius: 10px } .timeBar { width: 0; display: block; height: 4px; margin: 1px; padding: 0; background: -webkit-linear-gradient(top,#6bcce2 0,#1da3d0 100%); transition: width .2s linear; border-radius: 10px } .bufferBar { z-index: 5; width: 0; background: rgba(255,255,255,0.2) } .ja-player:hover .song-info,.ja-player:hover .progress { display: block } .ja-player .paused.play-bak { background: url(play.svg) no-repeat; background-size: auto 100% } .ja-player .paused.pause-bak { background: url(pause.svg) no-repeat; background-size: auto 100% } .ja-player .paused.pause { background-image: url(暂停 按钮);background-size: auto 100% } [data-xia],.xiami,.ja-player .paused.play { background-image: url(播放按钮 歌曲链接前的图片);background-size: auto 100% } [data-xia],.xiami { background-size: 20px 20px; background-repeat: no-repeat; cursor: pointer; padding-left: 22px }
HTML 代码结构:
<!-- 播放器界面 --> <div class="ja-player"></div> <!-- 只是单曲播放木有列表 --> <!-- data-xia 为虾米 ID 如果 定义 auto 则自动播放当前曲目 --> <span data-xia="1773470603">轻轻的放下</span><br /> <span auto data-xia="1773517137">去大理</span><br /> <span data-xia="1769902385">我的歌声里</span><br />
本文出自简爱博客,转载时请注明出处及相应链接。
评论
我想要这个播放器 能帮忙加到我网站 播放器里面的音乐可以换我自己要的音乐不?
挺好的,简洁效果看着不错
路过支持……
话说博主你这背景是否考虑换个……?
@c:播放器还是网页?
网页背景的话 你可以提供一个自己喜欢的 [呲牙/]
@简爱:网页背景~我觉得不如换个你喜欢的风景当背景,效果应该不错。
@c:如果有合适的早就换背景了[难过/],这只是将就着
挺不错的音乐