專輯: 《松田聖子 2020》
歌手: SEIKO MATSUDA 松田聖子
時間: 2020年09月30日
發行: EMI Records
語言: 日、英語流行 / J-Pop
❤【專輯簡介】:
松田聖子、デビュー40周年記念アルバム発売決定!
松本隆による全編日本語歌詞で初音源化された先行配信曲「SWEET MEMORIES~甘い記憶~」をはじめとする名曲リバイバルと、テレビ東京系「ワールドビジネスサテライト」エンディングテーマ「La La!! 明日に向かって」や周年記念シリーズとなる「40th PARTY」など新曲も満載!
松田聖子の過去から未来まで楽しめる40周年記念アルバム!
松田聖子將發行出道40週年紀念專輯!
從過去到未來都可以欣賞的松田聖子 40 週年紀念專輯! 包括松本隆全日歌詞首次發行的預發行歌曲《SWEET MEMORIES ~ Sweet Memories ~》、東京電視台《世界商業衛星》充滿新意片尾曲《La La!! Tomorrow》等著名歌曲的複興!! 走向明天”充滿了 新歌,例如周年紀念系列的“40th PARTY”,由松田聖子作詞,由Zaitsu Kazuo作曲的歌曲,以及著名歌曲“一花迎風”,這是37年來首次合作!
🎧【試聽曲目】 · · · · · ·
----- all music copyrighted please purchase original materials -----
----- 所有的音樂只是試聽音質請購買原裝版本 -----
${item.name}
${item.singer}
`;
});
$('.playlist').innerHTML = htmls.join('');
},
defineProperties: function () {
Object.defineProperty(this, "currentSong", {
get: function () {
return this.songs[this.currentIndex];
} });
},
handleEvents: function () {
const _this = this;
const cdWidth = cd.offsetWidth;
// X? l? CD quay / d?ng
const cdThumbAnimate = cdThumb.animate([{ transform: "rotate(360deg)" }], {
duration: 10000, // 10 seconds
iterations: Infinity });
cdThumbAnimate.pause();
// X? l? phóng to / thu nh? CD
document.onscroll = function () {
const scrollTop = window.scrollY || document.documentElement.scrollTop;
const newCdWidth = cdWidth - scrollTop;
cd.style.width = newCdWidth > 0 ? newCdWidth + "px" : 0;
cd.style.opacity = newCdWidth / cdWidth;
};
// X? l? khi click play
playBtn.onclick = function () {
if (_this.isPlaying) {
audio.pause();
} else {
audio.play();
}
};
// Khi song ???c play
audio.onplay = function () {
_this.isPlaying = true;
player.classList.add("playing");
cdThumbAnimate.play();
};
// Khi song b? pause
audio.onpause = function () {
_this.isPlaying = false;
player.classList.remove("playing");
cdThumbAnimate.pause();
};
// Khi ti?n ?? bài hát thay ??i
audio.ontimeupdate = function () {
if (audio.duration) {
const progressPercent = Math.floor(
audio.currentTime / audio.duration * 100);
progress.value = progressPercent;
}
};
// X? l? khi tua song
progress.oninput = function (e) {
// t? s? ph?n tr?m c?a gi?y convert sang gi?y
const seekTime = audio.duration / 100 * e.target.value;
audio.currentTime = seekTime;
audio.play();
};
// Khi next song
nextBtn.onclick = function () {
if (_this.isRandom) {
_this.playRandomSong();
} else {
_this.nextSong();
}
audio.play();
_this.render();
_this.scrollToActiveSong();
};
// Khi prev song
prevBtn.onclick = function () {
if (_this.isRandom) {
_this.playRandomSong();
} else {
_this.prevSong();
}
audio.play();
_this.render();
_this.scrollToActiveSong();
};
// X? l? b?t / t?t random song
randomBtn.onclick = function (e) {
_this.isRandom = !_this.isRandom;
_this.setConfig("isRandom", _this.isRandom);
randomBtn.classList.toggle("active", _this.isRandom);
};
// X? l? l?p l?i m?t song
repeatBtn.onclick = function (e) {
_this.isRepeat = !_this.isRepeat;
_this.setConfig("isRepeat", _this.isRepeat);
repeatBtn.classList.toggle("active", _this.isRepeat);
};
// X? l? next song khi audio ended
audio.onended = function () {
if (_this.isRepeat) {
audio.play();
} else {
nextBtn.click();
}
};
// L?ng nghe hành vi click vào playlist
playlist.onclick = function (e) {
let songNode = e.target.closest('.song:not(.active)');
if (!e.target.closest('.option')) {
if (songNode) {
_this.currentIndex = Number(songNode.dataset.index);
_this.loadCurrentSong();
audio.play();
}
}
};
},
scrollToActiveSong: function () {
setTimeout(() => {
if (this.currentIndex {
if (song.getAttribute('data-index') == this.currentIndex) {
song.classList.add('active');
}
});
},
loadConfig: function () {
this.isRandom = this.config.isRandom;
this.isRepeat = this.config.isRepeat;
},
nextSong: function () {
this.currentIndex++;
if (this.currentIndex >= this.songs.length) {
this.currentIndex = 0;
}
this.loadCurrentSong();
},
prevSong: function () {
this.currentIndex--;
if (this.currentIndex