斗鱼弹幕显示

显示弹幕

  1. // ==UserScript==
  2. // @name 斗鱼弹幕显示
  3. // @namespace https://github.com/daochouwangu/douyudanmu/blob/master/douyudanmu.js
  4. // @version 1.24
  5. // @description 显示弹幕
  6. // @supportURL https://github.com/daochouwangu/douyudanmu/issues
  7. // @author lyb
  8. // @compatible chrome
  9. // @license MIT
  10. // @icon https://www.douyu.com/favicon.ico
  11. // @match http*://www.douyu.com/*
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16. var FONT_SIZE = 20 //字体的大小
  17. var DANMU_PADDING = 10 //弹幕的宽度
  18. var SPEED = 100 //弹幕速度
  19. var MIN_TIME = 2000 //同一行的弹幕最小间隔时间,如果弹幕有重叠就增加这个值
  20. var BEGIN_TOP = 10 //弹幕离最上方的距离
  21. function initApplication(){
  22. var startTime = 0
  23. var prevTop = 0
  24. var targetNode = document.getElementById('js-barrage-list');
  25. var config = { attributes: false, childList: true, subtree: true };
  26. var callback = function(mutationsList) {
  27. for(var mutation of mutationsList) {
  28. if(mutation.addedNodes[0]){
  29. send(mutation.addedNodes[0].querySelector(".Barrage-content"));
  30. }
  31. }
  32. };
  33. var observer = new MutationObserver(callback);
  34. observer.observe(targetNode, config);
  35. //建立一个放弹幕的容器
  36. var wrapper = document.querySelector("#douyu_room_normal_player_danmuDom")
  37. //使用第一行弹幕的时间来控制弹幕的并发
  38. function send(danmu) {
  39. if(!danmu) return;
  40. var dom = danmu.cloneNode(true)
  41. var now = new Date()
  42. var clientWidth = wrapper.clientWidth
  43. var clientHeight = wrapper.clientHeight
  44. var time = clientWidth / SPEED
  45. dom.style.position = 'absolute'
  46. dom.style.zIndex = '10000'
  47. dom.style.transition = `transform ${time}s linear`
  48. dom.style.transform = `translateX(${clientWidth}px)`
  49. dom.style.fontSize = `${FONT_SIZE}px`
  50. dom.style.fontWeight = '800'
  51. if (!danmu.getAttribute('class').includes('color')){
  52. dom.style.color = '#fff'
  53. dom.style.textShadow = '#000 1px 0 0,#000 0 1px 0,#000 -1px 0 0,#000 0 -1px 0'
  54. }
  55. var top = BEGIN_TOP
  56. if (startTime === 0 ) {
  57. startTime = now
  58. } else {
  59. if(now - startTime <= MIN_TIME && prevTop + 2 * FONT_SIZE + DANMU_PADDING < clientHeight) {
  60. top=prevTop + FONT_SIZE + DANMU_PADDING
  61. prevTop = prevTop + FONT_SIZE + DANMU_PADDING
  62. } else {
  63. top=BEGIN_TOP
  64. prevTop = BEGIN_TOP
  65. startTime = now
  66. }
  67. }
  68. dom.style.top = `${top}px`
  69. wrapper.append(dom)
  70. //弹幕滚动效果
  71. setTimeout(function(){
  72. var width = dom.clientWidth
  73. dom.style.transform = `translateX(-${width}px)`
  74. },0)
  75. //垃圾回收
  76. setTimeout(function(){dom.remove()},time * 1500)
  77. }
  78. }
  79. var start = setInterval(function(){
  80. var wrapper = document.querySelector("#douyu_room_normal_player_danmuDom")
  81. var targetNode = document.getElementById('js-barrage-list');
  82.  
  83. if (wrapper && targetNode){
  84. initApplication()
  85. clearInterval(start)
  86. }
  87. },500)
  88. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址