setting.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import utils from './utils';
  2. class Setting {
  3. constructor(player) {
  4. this.player = player;
  5. this.player.template.mask.addEventListener('click', () => {
  6. this.hide();
  7. });
  8. this.player.template.settingButton.addEventListener('click', () => {
  9. this.show();
  10. });
  11. // loop
  12. this.loop = this.player.options.loop;
  13. this.player.template.loopToggle.checked = this.loop;
  14. this.player.template.loop.addEventListener('click', () => {
  15. this.player.template.loopToggle.checked = !this.player.template.loopToggle.checked;
  16. if (this.player.template.loopToggle.checked) {
  17. this.loop = true;
  18. } else {
  19. this.loop = false;
  20. }
  21. this.hide();
  22. });
  23. // show danmaku
  24. this.showDanmaku = this.player.user.get('danmaku');
  25. if (!this.showDanmaku) {
  26. this.player.danmaku && this.player.danmaku.hide();
  27. }
  28. this.player.template.showDanmakuToggle.checked = this.showDanmaku;
  29. this.player.template.showDanmaku.addEventListener('click', () => {
  30. this.player.template.showDanmakuToggle.checked = !this.player.template.showDanmakuToggle.checked;
  31. if (this.player.template.showDanmakuToggle.checked) {
  32. this.showDanmaku = true;
  33. this.player.danmaku.show();
  34. } else {
  35. this.showDanmaku = false;
  36. this.player.danmaku.hide();
  37. }
  38. this.player.user.set('danmaku', this.showDanmaku ? 1 : 0);
  39. this.hide();
  40. });
  41. // unlimit danmaku
  42. this.unlimitDanmaku = this.player.user.get('unlimited');
  43. this.player.template.unlimitDanmakuToggle.checked = this.unlimitDanmaku;
  44. this.player.template.unlimitDanmaku.addEventListener('click', () => {
  45. this.player.template.unlimitDanmakuToggle.checked = !this.player.template.unlimitDanmakuToggle.checked;
  46. if (this.player.template.unlimitDanmakuToggle.checked) {
  47. this.unlimitDanmaku = true;
  48. this.player.danmaku.unlimit(true);
  49. } else {
  50. this.unlimitDanmaku = false;
  51. this.player.danmaku.unlimit(false);
  52. }
  53. this.player.user.set('unlimited', this.unlimitDanmaku ? 1 : 0);
  54. this.hide();
  55. });
  56. // speed
  57. this.player.template.speed.addEventListener('click', () => {
  58. this.player.template.settingBox.classList.add('dplayer-setting-box-narrow');
  59. this.player.template.settingBox.classList.add('dplayer-setting-box-speed');
  60. });
  61. for (let i = 0; i < this.player.template.speedItem.length; i++) {
  62. this.player.template.speedItem[i].addEventListener('click', () => {
  63. this.player.speed(this.player.template.speedItem[i].dataset.speed);
  64. this.hide();
  65. });
  66. }
  67. // danmaku opacity
  68. if (this.player.danmaku) {
  69. const dWidth = 130;
  70. this.player.on('danmaku_opacity', (percentage) => {
  71. this.player.bar.set('danmaku', percentage, 'width');
  72. this.player.user.set('opacity', percentage);
  73. });
  74. this.player.danmaku.opacity(this.player.user.get('opacity'));
  75. const danmakuMove = (event) => {
  76. const e = event || window.event;
  77. let percentage = ((e.clientX || e.changedTouches[0].clientX) - utils.getBoundingClientRectViewLeft(this.player.template.danmakuOpacityBarWrap)) / dWidth;
  78. percentage = Math.max(percentage, 0);
  79. percentage = Math.min(percentage, 1);
  80. this.player.danmaku.opacity(percentage);
  81. };
  82. const danmakuUp = () => {
  83. document.removeEventListener(utils.nameMap.dragEnd, danmakuUp);
  84. document.removeEventListener(utils.nameMap.dragMove, danmakuMove);
  85. this.player.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active');
  86. };
  87. this.player.template.danmakuOpacityBarWrapWrap.addEventListener('click', (event) => {
  88. const e = event || window.event;
  89. let percentage = ((e.clientX || e.changedTouches[0].clientX) - utils.getBoundingClientRectViewLeft(this.player.template.danmakuOpacityBarWrap)) / dWidth;
  90. percentage = Math.max(percentage, 0);
  91. percentage = Math.min(percentage, 1);
  92. this.player.danmaku.opacity(percentage);
  93. });
  94. this.player.template.danmakuOpacityBarWrapWrap.addEventListener(utils.nameMap.dragStart, () => {
  95. document.addEventListener(utils.nameMap.dragMove, danmakuMove);
  96. document.addEventListener(utils.nameMap.dragEnd, danmakuUp);
  97. this.player.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active');
  98. });
  99. }
  100. }
  101. hide() {
  102. this.player.template.settingBox.classList.remove('dplayer-setting-box-open');
  103. this.player.template.mask.classList.remove('dplayer-mask-show');
  104. setTimeout(() => {
  105. this.player.template.settingBox.classList.remove('dplayer-setting-box-narrow');
  106. this.player.template.settingBox.classList.remove('dplayer-setting-box-speed');
  107. }, 300);
  108. this.player.controller.disableAutoHide = false;
  109. }
  110. show() {
  111. this.player.template.settingBox.classList.add('dplayer-setting-box-open');
  112. this.player.template.mask.classList.add('dplayer-mask-show');
  113. this.player.controller.disableAutoHide = true;
  114. }
  115. }
  116. export default Setting;