2
0

SongThumbnail.vue 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <template>
  2. <div class="thumbnail">
  3. <div
  4. v-if="
  5. song.youtubeId &&
  6. (!song.thumbnail ||
  7. (song.thumbnail &&
  8. (song.thumbnail.lastIndexOf('notes-transparent') !==
  9. -1 ||
  10. song.thumbnail.lastIndexOf('/assets/notes.png') !==
  11. -1 ||
  12. song.thumbnail.lastIndexOf('i.ytimg.com') !==
  13. -1)) ||
  14. song.thumbnail === 'empty' ||
  15. song.thumbnail == null)
  16. "
  17. class="yt-thumbnail-bg"
  18. :style="{
  19. 'background-image':
  20. 'url(' +
  21. `https://img.youtube.com/vi/${song.youtubeId}/mqdefault.jpg` +
  22. ')'
  23. }"
  24. ></div>
  25. <img
  26. v-if="
  27. song.youtubeId &&
  28. (!song.thumbnail ||
  29. (song.thumbnail &&
  30. (song.thumbnail.lastIndexOf('notes-transparent') !==
  31. -1 ||
  32. song.thumbnail.lastIndexOf('/assets/notes.png') !==
  33. -1 ||
  34. song.thumbnail.lastIndexOf('i.ytimg.com') !==
  35. -1)) ||
  36. song.thumbnail === 'empty' ||
  37. song.thumbnail == null)
  38. "
  39. loading="lazy"
  40. :src="`https://img.youtube.com/vi/${song.youtubeId}/mqdefault.jpg`"
  41. onerror="this.src='/assets/notes-transparent.png'"
  42. />
  43. <img
  44. v-else
  45. loading="lazy"
  46. :src="song.thumbnail"
  47. onerror="this.src='/assets/notes-transparent.png'"
  48. />
  49. </div>
  50. </template>
  51. <script>
  52. export default {
  53. props: {
  54. song: {
  55. type: Object,
  56. default: () => {}
  57. }
  58. }
  59. };
  60. </script>
  61. <style lang="scss">
  62. .thumbnail {
  63. min-width: 130px;
  64. height: 130px;
  65. position: relative;
  66. margin-top: -15px;
  67. margin-bottom: -15px;
  68. margin-left: -10px;
  69. .yt-thumbnail-bg {
  70. height: 100%;
  71. width: 100%;
  72. position: absolute;
  73. top: 0;
  74. filter: blur(1px);
  75. background: url("/assets/notes-transparent.png") no-repeat center center;
  76. }
  77. img {
  78. height: auto;
  79. width: 100%;
  80. margin-top: auto;
  81. margin-bottom: auto;
  82. z-index: 1;
  83. position: absolute;
  84. top: 0;
  85. bottom: 0;
  86. left: 0;
  87. right: 0;
  88. }
  89. }
  90. </style>