// ==UserScript== // @name B站直播间SC记录板 // @namespace http://tampermonkey.net/ // @homepage https://greasyfork.org/zh-CN/scripts/484381 // @version 8.1.0 // @description 实时同步SC、同接、高能和舰长数据,可拖拽移动,可导出,可单个SC折叠,可侧折,可记忆配置,可生成图片(右键菜单),活动页可用,黑名单功能,不用登录,多种主题切换,直播全屏也在顶层显示,自动清除超过12小时的房间SC存储 // @author ltxlong // @match *://live.bilibili.com/1* // @match *://live.bilibili.com/2* // @match *://live.bilibili.com/3* // @match *://live.bilibili.com/4* // @match *://live.bilibili.com/5* // @match *://live.bilibili.com/6* // @match *://live.bilibili.com/7* // @match *://live.bilibili.com/8* // @match *://live.bilibili.com/9* // @match *://live.bilibili.com/blanc/1* // @match *://live.bilibili.com/blanc/2* // @match *://live.bilibili.com/blanc/3* // @match *://live.bilibili.com/blanc/4* // @match *://live.bilibili.com/blanc/5* // @match *://live.bilibili.com/blanc/6* // @match *://live.bilibili.com/blanc/7* // @match *://live.bilibili.com/blanc/8* // @match *://live.bilibili.com/blanc/9* // @icon https://www.bilibili.com/favicon.ico // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js // @require https://cdn.bootcdn.net/ajax/libs/html2canvas/1.4.1/html2canvas.min.js // @grant unsafeWindow // @grant GM_registerMenuCommand // @license GPL-3.0-or-later // @downloadURL none // ==/UserScript== (function() { 'use strict'; function sc_catch_log(...msg) { console.log('%c[sc_catch]', 'font-weight: bold; color: white; background-color: #A7C9D3; padding: 2px; border-radius: 2px;', ...msg); } // 抓取SC :https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id= // 进入直播间的时候开始记录SC // 开始固定在屏幕左上方一侧,为圆形小图标,可以点击展开,可以拖拽移动,活动页可用,直播全屏也在顶层显示 // 通过Hook实时抓取数据 // 每个直播间隔离保留,用localstorage,并且自动清理时间长的数据 // SC标明发送时间和距离当前的时间差 // SC可折叠,可生成图片(折叠和展开都可以) // 黑名单功能 // 侧折模式功能 // 记忆模式选择功能 // 记忆模式说明: // 没记:没有记忆配置 // 题记:只记忆主题,所有<题记>房间共用一个主题配置 // 个记:独立记忆当前房间的所有配置 // 全记:所有的房间共用的记忆配置 // 记忆的优先级: // 全记 > 个记 > 题记 // 进入直播房间的时候会依次检查优先级,来进行自动加载配置 // 例子说明: // 有四个直播房间: // A、B、C、D // 已经打开:A[题记],B[个记] // 现在打开C房间,会从[全记]->[个记]->[题记]依次检查,都没有则默认是[没记]。 // 当C从[没记]切换到[题记]时,如果[题记]存在记忆的主题,C的主题会自动切换到[题记]记忆的主题,当C切换主题时候,会更新[题记]记忆的主题 // 这个时候,虽然A和C都是[题记]模式,但是主题却不一样,其中C的主题才是[题记]记忆的最新主题,当A页面刷新后,会变为[题记]最新记忆的主题 // 当C从[题记]切换到[个记],[题记]的房间中剔除C,并且C会立即生成自己的独立配置,处于[个记]模式下,C的所有配置操作都会独立记忆 // 当C从[个记]切换到[全记],C的[个记]独立配置会立即删除,并且会将自己的所有配置生成[全记]的配置,如果这个时候,A、B页面刷新,会自动加载[全记]的配置 // 现在打开D房间,由于已经存在[全记]的配置,所以D会自动加载[全记]的配置。 // 如果这个时候,D从[全记]切换到[没记],那么所有页面的[全记]都会失效,最多30秒后,其余[全记]页面的按钮会变为[没记](因为每30秒检查一次) // 刷新A、B页面,A会自动加载[题记], B会自动加载[个记],即都会恢复为被[全记]影响之前的配置模式 // 总结: // [个记]的删除时机:从[个记]点击按钮,手动切换到[全记] // [全记]的删除时机:从[全记]点击按钮,手动切换到[没记] // [题记]和[全记]的区别: // [题记]是一个小圈子,这个圈子有自己的主题颜色,每个房间都可以加入其中,切换加入的时候,该房间会被动的染上圈子的主题颜色,并且也有权限改变圈子的颜色 // [全记]是一个全局权限,当有一个房间切换到[全记]时,即拿到了这个全局权限,并且复制自己的所有配置附加在上面, // 后续每一个新进入/刷新的房间都会自动获得这个全局权限并且自动加载上面的配置, // 当其中一个房间从[全记]模式切换到[没记]的时候,这个全局权限就会失效,最多30秒后,其余[全记]页面的按钮会变为[没记](因为每30秒检查一次),其余房间刷新页面会恢复被[全记]影响之前的配置模式 let room_id = unsafeWindow.location.pathname.split('/').pop(); let sc_url_api = 'https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id='; sc_catch_log('url_room_id:', room_id); if (!room_id) { sc_catch_log('获取room_id失败,插件已停止正确的SC存储'); } let sc_url = sc_url_api + room_id; // 请求sc的url let sc_panel_high = 400; // 显示面板的最大高度(单位是px,后面会拼接) let sc_rectangle_width = 302; let data_show_top_flag = true; // 是否在页面右侧弹幕滚动框的顶部动态显示数据 let data_show_bottom_flag = true; // 是否在页面右侧弹幕滚动框的底部动态显示数据 let sc_localstorage_key = 'live_' + room_id + '_sc'; let sc_sid_localstorage_key = 'live_' + room_id + '_sc_sid'; let sc_live_room_title = ''; let sc_keep_time_key = 'live_' + room_id + '_sc_keep_time'; let sc_clear_time_hour = 12; // 大于sc_clear_time_hour(默认12)小时即清除上一次的存储(会自动遍历检测所有存储的房间) let sc_now_time = (new Date()).getTime(); let sc_keep_time = unsafeWindow.localStorage.getItem(sc_keep_time_key); let sc_keep_time_flag = 0; let high_energy_num = 0; let sc_update_date_guard_once = false; let sc_room_blacklist_flag = false; // 0-侧折模式下显示所有的按钮 // 1-侧折模式下隐藏所有的按钮 // 2-侧折模式下按钮的极简模式(只显示菜单和折叠按钮) // 3-侧折模式下只显示折叠按钮 // 4-侧折模式下只显示菜单按钮 let sc_func_btn_mode = 0; let sc_panel_allow_drag_flag = true; // 是否可以拖拽 let sc_side_fold_custom_config = 0; // 侧折模式的自定义:0-默认,1-第一个展开,2-第一个展开时间自定义 let sc_side_fold_custom_time = 0; let sc_side_fold_custom_first_class = ''; let sc_side_fold_custom_first_timeout_id = ''; let sc_memory = 0; // 0-没记,1-题记,2-个记,3-全记 let sc_switch = 0; let sc_panel_fold_mode = 0; // 0-最小化,1-侧折,2-展开 let sc_panel_side_fold_simple = false; // 侧折的极简模式 let sc_panel_drag_left = -1; let sc_panel_drag_top = -1; let sc_panel_side_fold_flag = false; // 侧折 let sc_item_side_fold_touch_flag = false; let sc_item_side_fold_touch_oj = {}; let sc_self_memory_config_key = 'live_' + room_id + '_sc_self_memory_config'; function sc_memory_get_store_mode_all(sc_all_memory_config_json) { let sc_all_memory_config = JSON.parse(sc_all_memory_config_json); sc_switch = sc_all_memory_config['sc_switch'] ?? 0; sc_panel_fold_mode = sc_all_memory_config['sc_panel_fold_mode'] ?? 0; sc_panel_side_fold_flag = sc_all_memory_config['sc_panel_side_fold_flag'] ?? false; sc_panel_side_fold_simple = sc_all_memory_config['sc_panel_side_fold_simple'] ?? false; sc_panel_drag_left = sc_all_memory_config['sc_panel_drag_left'] ?? -1; sc_panel_drag_top = sc_all_memory_config['sc_panel_drag_top'] ?? -1; sc_func_btn_mode = sc_all_memory_config['sc_func_btn_mode'] ?? 0; data_show_bottom_flag = sc_all_memory_config['data_show_bottom_flag'] ?? true; sc_panel_allow_drag_flag = sc_all_memory_config['sc_panel_allow_drag_flag'] ?? true; sc_side_fold_custom_config = sc_all_memory_config['sc_side_fold_custom_config'] ?? 0; sc_side_fold_custom_time = sc_all_memory_config['sc_side_fold_custom_time'] ?? 10; if (sc_panel_fold_mode === 1 && (unsafeWindow.innerWidth - sc_panel_drag_left) < 72) { sc_panel_drag_left = unsafeWindow.innerWidth - 72; } if (sc_panel_fold_mode === 2 && (unsafeWindow.innerWidth - sc_panel_drag_left) < sc_rectangle_width) { sc_panel_drag_left = unsafeWindow.innerWidth - sc_rectangle_width; } if (sc_panel_drag_top <= 0) { sc_panel_drag_top = 0; } if (sc_panel_drag_top >= unsafeWindow.innerHeight) { sc_panel_drag_top = unsafeWindow.innerHeight - sc_panel_high; } } function sc_memory_get_store_mode_self(sc_self_memory_config_json) { let sc_self_memory_config = JSON.parse(sc_self_memory_config_json); sc_switch = sc_self_memory_config['sc_switch'] ?? 0; sc_panel_fold_mode = sc_self_memory_config['sc_panel_fold_mode'] ?? 0; sc_panel_side_fold_flag = sc_self_memory_config['sc_panel_side_fold_flag'] ?? false; sc_panel_side_fold_simple = sc_self_memory_config['sc_panel_side_fold_simple'] ?? false; sc_panel_drag_left = sc_self_memory_config['sc_panel_drag_left'] ?? -1; sc_panel_drag_top = sc_self_memory_config['sc_panel_drag_top'] ?? -1; sc_func_btn_mode = sc_self_memory_config['sc_func_btn_mode'] ?? 0; data_show_bottom_flag = sc_self_memory_config['data_show_bottom_flag'] ?? true; sc_panel_allow_drag_flag = sc_self_memory_config['sc_panel_allow_drag_flag'] ?? true; sc_side_fold_custom_config = sc_self_memory_config['sc_side_fold_custom_config'] ?? 0; sc_side_fold_custom_time = sc_self_memory_config['sc_side_fold_custom_time'] ?? 10; if (sc_panel_fold_mode === 1 && (unsafeWindow.innerWidth - sc_panel_drag_left) < 72) { sc_panel_drag_left = unsafeWindow.innerWidth - 72; } if (sc_panel_fold_mode === 2 && (unsafeWindow.innerWidth - sc_panel_drag_left) < sc_rectangle_width) { sc_panel_drag_left = unsafeWindow.innerWidth - sc_rectangle_width; } if (sc_panel_drag_top <= 0) { sc_panel_drag_top = 0; } if (sc_panel_drag_top >= unsafeWindow.innerHeight) { sc_panel_drag_top = unsafeWindow.innerHeight - sc_panel_high; } sc_memory = 2; } function sc_memory_get_store_mode_switch(sc_switch_memory_rooms_json) { let sc_switch_memory_rooms = JSON.parse(sc_switch_memory_rooms_json); if (sc_switch_memory_rooms.includes(room_id)) { let sc_switch_record = unsafeWindow.localStorage.getItem('live_sc_switch_record'); if (sc_switch_record !== null && sc_switch_record !== 'null' && sc_switch_record !== '') { sc_switch = parseInt(sc_switch_record, 10); } sc_memory = 1; } } // 记忆配置检查 // 优先级:3-全记 > 2-个记 > 1-题记 let sc_memory_all_rooms_mode = unsafeWindow.localStorage.getItem('live_sc_memory_all_rooms_mode'); if (sc_memory_all_rooms_mode !== null && sc_memory_all_rooms_mode !== 'null' && sc_memory_all_rooms_mode !== '') { sc_memory = parseInt(sc_memory_all_rooms_mode, 10); // sc_memory_all_rooms_mode的值目前只能是3-全记 if (sc_memory !== 3) { sc_memory = 0; } if (sc_memory === 3) { // 全记 let sc_all_memory_config_json = unsafeWindow.localStorage.getItem('live_sc_all_memory_config'); if (sc_all_memory_config_json !== null && sc_all_memory_config_json !== 'null' && sc_all_memory_config_json !== '[]' && sc_all_memory_config_json !== '{}' && sc_all_memory_config_json !== '') { sc_memory_get_store_mode_all(sc_all_memory_config_json); } } else { // 个记 let sc_self_memory_config_json = unsafeWindow.localStorage.getItem(sc_self_memory_config_key); if (sc_self_memory_config_json !== null && sc_self_memory_config_json !== 'null' && sc_self_memory_config_json !== '[]' && sc_self_memory_config_json !== '{}' && sc_self_memory_config_json !== '') { sc_memory_get_store_mode_self(sc_self_memory_config_json); } else { // 题记 let sc_switch_memory_rooms_json = unsafeWindow.localStorage.getItem('live_sc_switch_memory_rooms'); if (sc_switch_memory_rooms_json !== null && sc_switch_memory_rooms_json !== 'null' && sc_switch_memory_rooms_json !== '[]' && sc_switch_memory_rooms_json !== '') { sc_memory_get_store_mode_switch(sc_switch_memory_rooms_json); } } } } else { // 个记 let sc_self_memory_config_json = unsafeWindow.localStorage.getItem(sc_self_memory_config_key); if (sc_self_memory_config_json !== null && sc_self_memory_config_json !== 'null' && sc_self_memory_config_json !== '[]' && sc_self_memory_config_json !== '{}' && sc_self_memory_config_json !== '') { sc_memory_get_store_mode_self(sc_self_memory_config_json); } else { // 题记 let sc_switch_memory_rooms_json = unsafeWindow.localStorage.getItem('live_sc_switch_memory_rooms'); if (sc_switch_memory_rooms_json !== null && sc_switch_memory_rooms_json !== 'null' && sc_switch_memory_rooms_json !== '[]' && sc_switch_memory_rooms_json !== '') { sc_memory_get_store_mode_switch(sc_switch_memory_rooms_json); } } } if (sc_keep_time !== null && sc_keep_time !== 'null' && sc_keep_time !== 0 && sc_keep_time !== '') { sc_keep_time_flag = 1; } // 先检测并处理本房间的 if (sc_keep_time_flag && (sc_now_time - sc_keep_time) > 1000 * 60 * 60 * sc_clear_time_hour) { unsafeWindow.localStorage.removeItem(sc_localstorage_key); unsafeWindow.localStorage.removeItem(sc_sid_localstorage_key); } function check_and_clear_all_sc_store() { // 遍历清除所有过期的sc存储 let live_sc_rooms_json = unsafeWindow.localStorage.getItem('live_sc_rooms'); if (live_sc_rooms_json !== null && live_sc_rooms_json !== 'null' && live_sc_rooms_json !== '[]' && live_sc_rooms_json !== '') { let live_sc_rooms = JSON.parse(live_sc_rooms_json); let live_sc_rooms_new = []; for (let m = 0; m < live_sc_rooms.length; m++) { let sc_keep_time_item = unsafeWindow.localStorage.getItem('live_' + live_sc_rooms[m] + '_sc_keep_time'); if (sc_keep_time_item === null || sc_keep_time_item === 'null' || sc_keep_time_item === 0 || sc_keep_time_item === '') { continue; } else if (sc_keep_time_item !== null && sc_keep_time_item !== 'null' && sc_keep_time_item !== 0 && sc_keep_time_item !== '' && ((sc_now_time - sc_keep_time_item) / (1000 * 60 * 60)) > sc_clear_time_hour) { unsafeWindow.localStorage.removeItem('live_' + live_sc_rooms[m] + '_sc'); // 清除sc存储 unsafeWindow.localStorage.removeItem('live_' + live_sc_rooms[m] + '_sc_sid'); // 清除sc的sid存储 unsafeWindow.localStorage.removeItem('live_' + live_sc_rooms[m] + '_sc_keep_time'); //清除sc的keep time存储 } else { live_sc_rooms_new.push(live_sc_rooms[m]); } } // 更新live_sc_rooms unsafeWindow.localStorage.setItem('live_sc_rooms', JSON.stringify(live_sc_rooms_new)); } } function sc_side_fold_in_one(target_oj) { target_oj.css('border-radius', '8px'); target_oj.find('.sc_msg_body').hide(); target_oj.find('.sc_msg_head').css('border-radius', '6px'); target_oj.find('.sc_msg_head_left').hide(); target_oj.find('.sc_msg_head_right').hide(); } function sc_side_fold_out_one(target_oj, mouse_enter_flag = false) { target_oj.css('border-radius', '8px 8px 6px 6px'); let sc_item_fold_flag = target_oj.attr('data-fold'); if (sc_item_fold_flag === '0') { target_oj.find('.sc_msg_body').show(); target_oj.find('.sc_msg_head').css('border-radius', '6px 6px 0px 0px'); if (mouse_enter_flag) { target_oj.attr('data-height', target_oj.outerHeight()) } } target_oj.find('.sc_msg_head_left').show(); target_oj.find('.sc_msg_head_right').show(); } function sc_side_fold_in_all() { $(document).find('.sc_long_item').each(function() { sc_side_fold_in_one($(this)); }); } function sc_side_fold_out_all() { $(document).find('.sc_long_item').each(function() { sc_side_fold_out_one($(this)); }); } function sc_trigger_item_side_fold_out(target_oj) { target_oj.css('position', 'absolute'); target_oj.css('top', '10px'); // 第一个SC target_oj.css('z-index', '10'); target_oj.css('width', (sc_rectangle_width - 22) + 'px'); // 22 约为总padding target_oj.css('height', ''); if ((target_oj.offset().left - (unsafeWindow.innerWidth / 2)) > 0) { target_oj.css('left', -(sc_rectangle_width - 22 - 72 + 10)); // 22 约为总padding, 72为侧折后的宽,10为一个padding } sc_side_fold_out_one(target_oj, true); } function sc_trigger_item_side_fold_in(target_oj) { target_oj.css('position', ''); target_oj.css('top', ''); target_oj.css('z-index', ''); target_oj.css('width', '50px'); target_oj.css('height', '50px'); target_oj.css('left', ''); sc_side_fold_in_one(target_oj); } function sc_process_start() { // Create a container for the circle const sc_circleContainer = document.createElement('div'); sc_circleContainer.classList.add('sc_long_circle', 'sc_drag_div'); sc_circleContainer.style.width = '30px'; sc_circleContainer.style.height = '30px'; sc_circleContainer.style.backgroundColor = 'rgb(167,201,211,0.5)'; //#A7C9D3 (恬豆应援色) sc_circleContainer.style.borderRadius = '50%'; sc_circleContainer.style.border = '2px solid #ffffff'; sc_circleContainer.style.position = 'fixed'; sc_circleContainer.style.left = 0; sc_circleContainer.style.top = 0; sc_circleContainer.style.color = '#ffffff'; sc_circleContainer.style.lineHeight = '30px'; sc_circleContainer.textContent = 'SC'; sc_circleContainer.style.textAlign = 'center'; sc_circleContainer.style.cursor = 'grab'; sc_circleContainer.style.userSelect = 'none'; sc_circleContainer.style.zIndex = '2233'; // Create a container for the rectangle const sc_rectangleContainer = document.createElement('div'); sc_rectangleContainer.classList.add('sc_long_rectangle', 'sc_drag_div'); sc_rectangleContainer.style.width = sc_rectangle_width + 'px'; sc_rectangleContainer.style.height = 'auto'; sc_rectangleContainer.style.backgroundColor = 'rgba(255,255,255,1)'; sc_rectangleContainer.style.position = 'fixed'; sc_rectangleContainer.style.display = 'none'; sc_rectangleContainer.style.borderBottom = '10px solid transparent'; sc_rectangleContainer.style.cursor = 'grab'; sc_rectangleContainer.style.userSelect = 'none'; sc_rectangleContainer.style.zIndex = '2233'; // Add a button to the page to trigger minimize function const sc_minimizeButton = document.createElement('button'); sc_minimizeButton.textContent = '折叠'; sc_minimizeButton.classList.add('sc_button_min', 'sc_button_item'); sc_minimizeButton.style.cursor = 'pointer'; sc_minimizeButton.style.marginRight = '0px'; $(document).on('click', '.sc_button_min', sc_minimize); // Add a button to the page to trigger sidefold function const sc_sidefoldButton = document.createElement('button'); sc_sidefoldButton.textContent = '侧折'; sc_sidefoldButton.classList.add('sc_button_sidefold', 'sc_button_item'); sc_sidefoldButton.style.cursor = 'pointer'; $(document).on('click', '.sc_button_sidefold', sc_sidefold); $(document).on('click', '.sc_button_foldback', sc_foldback); // Add a button to the page to trigger memory function let sc_memory_text_arr = ['没记', '题记', '个记', '全记']; const sc_memoryButton = document.createElement('button'); sc_memoryButton.textContent = sc_memory_text_arr[sc_memory]; sc_memoryButton.title = '[没记]-没记忆配置;[题记]-所有<题记>房间共用一个主题配置;[个记]-独立记忆当前的所有配置;[全记]-所有房间共用当前的所有配置'; sc_memoryButton.classList.add('sc_button_memory', 'sc_button_item'); sc_memoryButton.style.cursor = 'pointer'; $(document).on('click', '.sc_button_memory', sc_memory_modify); // Add a button to the page to trigger export function const sc_exportButton = document.createElement('button'); sc_exportButton.textContent = '导出'; sc_exportButton.classList.add('sc_button_export', 'sc_button_item'); sc_exportButton.style.cursor = 'pointer'; $(document).on('click', '.sc_button_export', sc_export); // Add a button to the page to trigger switch function const sc_switchButton = document.createElement('button'); sc_switchButton.textContent = '切换'; sc_switchButton.title = '主题切换'; sc_switchButton.classList.add('sc_button_switch', 'sc_button_item'); sc_switchButton.style.cursor = 'pointer'; $(document).on('click', '.sc_button_switch', () => sc_switch_css(true)); // Add a button to the page to trigger menu function const sc_menuButton = document.createElement('button'); sc_menuButton.textContent = '菜单'; sc_menuButton.classList.add('sc_button_menu', 'sc_button_item'); sc_menuButton.style.cursor = 'pointer'; sc_menuButton.style.display = 'none'; $(document).on('click', '.sc_button_menu', sc_menu); // Create a container for the buttons const sc_buttonsContainer = document.createElement('div'); sc_buttonsContainer.className = 'sc_long_buttons'; sc_buttonsContainer.style.display = 'none'; sc_buttonsContainer.style.backgroundColor = 'rgba(255,255,255,0)'; sc_buttonsContainer.style.textAlign = 'center'; sc_buttonsContainer.style.position = 'sticky'; sc_buttonsContainer.style.top = '0'; sc_buttonsContainer.style.zIndex = '3'; // Create a container for the dataShow const sc_dataShowContainer = document.createElement('div'); sc_dataShowContainer.className = 'sc_data_show'; sc_dataShowContainer.style.display = 'none'; sc_dataShowContainer.style.backgroundColor = 'rgba(255,255,255,0)'; sc_dataShowContainer.style.textAlign = 'center'; sc_dataShowContainer.style.position = 'sticky'; sc_dataShowContainer.style.zIndex = '3'; sc_dataShowContainer.style.height = '20px'; sc_dataShowContainer.style.fontSize = '15px'; sc_dataShowContainer.style.paddingLeft = '10px'; sc_dataShowContainer.style.paddingRight = '10px'; sc_dataShowContainer.style.paddingTop = '10px'; sc_dataShowContainer.style.marginBottom = '20px'; // Create labels for the dataShow const sc_label_high_energy_num_left = document.createElement('label'); sc_label_high_energy_num_left.textContent = '同接:'; sc_label_high_energy_num_left.classList.add('sc_data_show_label', 'sc_high_energy_num_left'); sc_label_high_energy_num_left.style.float = 'left'; const sc_label_high_energy_num_right = document.createElement('label'); sc_label_high_energy_num_right.textContent = '0'; sc_label_high_energy_num_right.classList.add('sc_data_show_label', 'sc_high_energy_num_right'); sc_label_high_energy_num_right.style.float = 'left'; const sc_label_captain_num_left = document.createElement('label'); sc_label_captain_num_left.textContent = '舰长:'; sc_label_captain_num_left.classList.add('sc_data_show_label', 'sc_captain_num_left'); sc_label_captain_num_left.style.float = 'right'; const sc_label_captain_num_right = document.createElement('label'); sc_label_captain_num_right.textContent = '0'; sc_label_captain_num_right.classList.add('sc_data_show_label', 'sc_captain_num_right'); sc_label_captain_num_right.style.float = 'right'; const sc_label_data_br1 = document.createElement('br'); sc_label_data_br1.style.display = 'none'; sc_label_data_br1.className = 'sc_label_data_br'; const sc_label_data_br2 = document.createElement('br'); sc_label_data_br2.style.display = 'none'; sc_label_data_br2.className = 'sc_label_data_br'; const sc_label_data_br3 = document.createElement('br'); sc_label_data_br3.style.display = 'none'; sc_label_data_br3.classList.add('sc_label_data_br', 'sc_label_num_br3'); // Append buttons to the container sc_buttonsContainer.appendChild(sc_switchButton); sc_buttonsContainer.appendChild(sc_exportButton); sc_buttonsContainer.appendChild(sc_memoryButton); sc_buttonsContainer.appendChild(sc_sidefoldButton); sc_buttonsContainer.appendChild(sc_menuButton); sc_buttonsContainer.appendChild(sc_minimizeButton); // Append the container to the rectangle sc_rectangleContainer.appendChild(sc_buttonsContainer); sc_dataShowContainer.appendChild(sc_label_high_energy_num_left); sc_dataShowContainer.appendChild(sc_label_data_br1); sc_dataShowContainer.appendChild(sc_label_high_energy_num_right); sc_dataShowContainer.appendChild(sc_label_data_br2); sc_dataShowContainer.appendChild(sc_label_captain_num_right); sc_dataShowContainer.appendChild(sc_label_data_br3); sc_dataShowContainer.appendChild(sc_label_captain_num_left); sc_rectangleContainer.appendChild(sc_dataShowContainer); if (sc_panel_high < 200) { sc_panel_high = 200; } // Create a container for sc list const sc_listContainer = document.createElement('div'); sc_listContainer.className = 'sc_long_list'; sc_listContainer.style.minHeight = '200px'; sc_listContainer.style.maxHeight = sc_panel_high + 'px'; sc_listContainer.style.overflowY = 'scroll'; sc_listContainer.style.overflowX = 'hidden'; sc_listContainer.style.scrollbarGutter = 'stable'; // 滚动条不占位置 sc_listContainer.style.paddingLeft = '10px'; sc_listContainer.style.paddingTop = '10px'; sc_listContainer.style.paddingBottom = '10px'; sc_listContainer.style.paddingRight = '13px'; sc_listContainer.style.marginRight = '-7px'; // 可能scrollbarGutter不是所有浏览器都支持,加多这个和设置'scroll'兼容下 // Append the container to the rectangle sc_rectangleContainer.appendChild(sc_listContainer); // scrollbar css let sc_scrollbar_style = document.createElement('style'); sc_scrollbar_style.id = 'sc_scrollbar_style'; sc_scrollbar_style.textContent = ` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(204,204,204,0.5); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(204,204,204,0); } `; document.head.appendChild(sc_scrollbar_style); let sc_other_style = document.createElement('style'); sc_other_style.textContent = ` @keyframes sc_fadenum { 0%{transform: translateY(-100%);opacity: 0;} 100%{transform: translateY(0);opacity: 1;} } @keyframes sc_sun { 100%{ background-position: -350% 0; } } .sc_button_item { text-decoration: none; width: 50px; padding: 5px; margin-top: 15px; margin-bottom: 15px; margin-right: 7px; background: linear-gradient(90deg, #A7C9D3, #eeeeee, #5c95d7, #A7C9D3); background-size: 350%; color: #ffffff; border: none; } .sc_button_item:hover { animation: sc_sun 7s infinite; } .sc_copy_btn { text-decoration: none; width: 'auto'; padding: 5px; background: linear-gradient(90deg, #A7C9D3, #eeeeee, #5c95d7, #A7C9D3); background-size: 350%; color: #ffffff; border: none; box-shadow: '0 0 3px rgba(0, 0, 0, 0.3)'; } .sc_copy_btn:hover { animation: sc_sun 7s infinite; } .sc_func_btn { text-decoration: none; width: 'auto'; padding: 5px; background: linear-gradient(90deg, #A7C9D3, #eeeeee, #5c95d7, #A7C9D3); background-size: 350%; color: #ffffff; border: none; box-shadow: '0 0 3px rgba(0, 0, 0, 0.3)'; } .sc_func_btn:hover { animation: sc_sun 7s infinite; } .fans_medal_item { color: #ffffff; height: 14px; line-height: 14px; border-radius: 2px; display: inline-flex; margin-left: 5px; align-items: center; justify-content: center; margin-bottom: 5px; } .fans_medal_label { padding: 0 3px; } .fans_medal_content { font-size: 10px; } .fans_medal_level { color: #06154c; background-color: #ffffff; font-size: 10px; padding: 0 3px; border-top-right-radius: 1px; border-bottom-right-radius: 1px; align-items: center; justify-content: center; } `; document.head.appendChild(sc_other_style); let live_player_div = document.getElementById('live-player'); if (!live_player_div) { return; } // 黑名单相关 if (!check_blacklist_menu(room_id)) { sc_room_blacklist_flag = true; return; } document.body.appendChild(sc_circleContainer); document.body.appendChild(sc_rectangleContainer); let sc_isDragging = false; let sc_isClickAllowed = true; let sc_drag_start = 0; // 兼容有的时候点击触发拖拽的情况 let sc_offsetX = 0; let sc_offsetY = 0; let sc_isListEmpty = true; let sc_isFullscreen = false; // Set initial position sc_circleContainer.style.top = `${unsafeWindow.innerHeight / 4}px`; $(document).on('mousedown', '.sc_drag_div', sc_startDragging); $(document).on('mousemove', sc_drag); $(document).on('mouseup', '.sc_drag_div', sc_stopDragging); // 让全屏直播的情况下也显示 live_player_div.addEventListener('fullscreenchange', sc_handleFullscreenChange); live_player_div.addEventListener('webkitfullscreenchange', sc_handleFullscreenChange); live_player_div.addEventListener('mozfullscreenchange', sc_handleFullscreenChange); live_player_div.addEventListener('MSFullscreenChange', sc_handleFullscreenChange); function sc_handleFullscreenChange() { if (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement) { let sc_circle_clone = $(sc_circleContainer).clone(true); let sc_rectangle_clone = $(sc_rectangleContainer).clone(true); $(live_player_div).append(sc_circle_clone); $(live_player_div).append(sc_rectangle_clone); sc_isFullscreen = true; } else { $(live_player_div).find('.sc_drag_div').remove(); sc_isFullscreen = false; // 判断sc_circle界限 let xPos = 0; let yPos = 0; let sc_circles = $(document).find('.sc_long_circle'); let sc_circles_width = sc_circles.width(); let sc_circles_height = sc_circles.height(); sc_circles.each(function() { let rect = this.getBoundingClientRect(); xPos = rect.left; yPos = rect.top; }); if (unsafeWindow.innerWidth - xPos < sc_circles_width) { xPos = unsafeWindow.innerWidth - sc_circles_width; sc_circles.css('left', xPos + 'px'); } if (unsafeWindow.innerHeight - yPos < sc_circles_height) { yPos = unsafeWindow.innerHeight - sc_circles_height - 5; sc_circles.css('top', yPos + 'px'); } // 判断sc_rectangle界限 let sc_rectangles = $(document).find('.sc_long_rectangle'); let sc_rectangles_width = sc_rectangles.width(); let sc_rectangles_height = sc_rectangles.height(); sc_rectangles.each(function() { let rect = this.getBoundingClientRect(); xPos = rect.left; yPos = rect.top; }); if (unsafeWindow.innerWidth - xPos < sc_rectangles_width) { xPos = unsafeWindow.innerWidth - sc_rectangles_width; sc_rectangles.css('left', xPos + 'px'); } if (unsafeWindow.innerHeight - yPos < sc_rectangles_height) { yPos = unsafeWindow.innerHeight - sc_rectangles_height - 10; sc_rectangles.css('top', yPos + 'px'); } } } function sc_startDragging(e) { if (!sc_panel_allow_drag_flag) { return; } e = e || unsafeWindow.event; sc_isDragging = true; sc_isClickAllowed = true; const rect = e.target.getBoundingClientRect(); sc_offsetX = e.clientX - rect.left; sc_offsetY = e.clientY - rect.top; sc_drag_start = (new Date()).getTime(); } function sc_drag(e) { if (!sc_panel_allow_drag_flag) { return; } e = e || unsafeWindow.event; if (sc_isDragging && ((new Date()).getTime() - sc_drag_start) > 30) { let sc_elements = $(document).find('.sc_drag_div'); sc_elements.each(function() { const rect = this.getBoundingClientRect(); const maxX = unsafeWindow.innerWidth - rect.width; const maxY = unsafeWindow.innerHeight - rect.height; let x = Math.min(maxX, Math.max(0, e.clientX - sc_offsetX)) + 0.5; // 这个0.5交给浏览器吧,至少chrome上是完美的 let y = Math.min(maxY, Math.max(0, e.clientY - sc_offsetY)); $(this).css('left', x + 'px'); $(this).css('top' , y + 'px'); }); sc_isClickAllowed = false; if (e.clientY < 0 || e.clientX < 0 || e.clientY >= unsafeWindow.innerHeight || e.clientX >= unsafeWindow.innerWidth - 5) { // 页面外时触发 mouseup 事件的逻辑 sc_stopDragging(); } } } function sc_stopDragging() { if (!sc_panel_allow_drag_flag) { return; } if (!sc_isClickAllowed) { const rect_circle = $(document).find('.sc_long_circle')[0].getBoundingClientRect(); if (rect_circle.width === 0 && rect_circle.height === 0) { const rect_rectangle = $(document).find('.sc_long_rectangle')[0].getBoundingClientRect(); sc_panel_drag_store(rect_rectangle.left, rect_rectangle.top); } else { sc_panel_drag_store(rect_circle.left, rect_circle.top); } } sc_isDragging = false; } $(document).on('click', '.sc_long_circle', () => { if (sc_isClickAllowed) { let xPos = 0; let yPos = 0; let sc_circles = $(document).find('.sc_long_circle'); sc_circles.each(function() { let rect = this.getBoundingClientRect(); xPos = rect.left; yPos = rect.top; $(this).hide(); }); if (sc_panel_side_fold_flag) { if (unsafeWindow.innerWidth - xPos < 72) { xPos = unsafeWindow.innerWidth - 72; } sc_panel_fold_mode = 1; } else { if (unsafeWindow.innerWidth - xPos < sc_rectangle_width) { xPos = unsafeWindow.innerWidth - sc_rectangle_width; } sc_panel_fold_mode = 2; } if (unsafeWindow.innerHeight - yPos < sc_panel_high) { yPos = unsafeWindow.innerHeight - sc_panel_high - 150; } let sc_rectangles = $(document).find('.sc_long_rectangle'); sc_rectangles.each(function() { $(this).css('left', xPos + 'px'); $(this).css('top', yPos + 'px'); $(document).find('.sc_long_buttons').show(); $(document).find('.sc_data_show').show(); $(this).slideDown(500); }); sc_fold_mode_store(); } else { sc_isClickAllowed = true; } }); $(document).on('mouseenter', '.sc_long_circle', () => { $(document).find('.sc_long_circle').css('border', '3px solid rgba(255,255,255,0.5)'); }); $(document).on('mouseleave', '.sc_long_circle', () => { $(document).find('.sc_long_circle').css('border', '2px solid #ffffff'); }); let sc_rectangle_is_slide_down = false; let sc_rectangle_is_slide_up = false; // 优化回弹问题 $(document).on('mouseenter', '.sc_long_rectangle, .sc_long_buttons, .sc_data_show', () => { if (sc_rectangle_is_slide_down) { return; } sc_rectangle_is_slide_down = true; let sc_btn_model = document.getElementsByClassName('sc_long_buttons'); let sc_data_model = document.getElementsByClassName('sc_data_show'); let sc_data_lable_model = document.getElementsByClassName('sc_data_show label'); let sc_rectangle_model = document.getElementsByClassName('sc_long_rectangle'); let sc_list_model = document.getElementsByClassName('sc_long_list'); function sc_change_show() { if (!sc_panel_side_fold_flag || (sc_panel_side_fold_flag && sc_func_btn_mode !== 1)) { $(sc_btn_model).slideDown(500, () => { sc_rectangle_is_slide_down = false; }); } if (!sc_panel_side_fold_flag || (sc_panel_side_fold_flag && sc_panel_side_fold_simple)) { $(sc_data_model).slideDown(500, () => { sc_rectangle_is_slide_down = false; }); $(sc_data_lable_model).animate({opacity: 1}, 1000); } // 设置动画完成标志,用于处理鼠标的快速移入移出 $(sc_data_model).attr('data-anime', '0'); } if (sc_panel_fold_mode === 1) { let sc_extra_height = 0; let sc_enter_change = $(sc_btn_model).outerHeight() + $(sc_data_model).outerHeight() + 20; let sc_diff_height = unsafeWindow.innerHeight - sc_rectangle_model[0].offsetTop - $(sc_list_model).outerHeight() - $(sc_btn_model).outerHeight() - $(sc_data_model).outerHeight() - 25; if (!sc_panel_side_fold_simple) { sc_extra_height = $(sc_data_model).outerHeight(); if (sc_func_btn_mode !== 1) { sc_enter_change = $(sc_btn_model).outerHeight() + 10; } else { sc_enter_change = $(sc_btn_model).outerHeight(); } } if (Math.abs(unsafeWindow.innerHeight - sc_rectangle_model[0].offsetTop - $(sc_list_model).outerHeight() - sc_extra_height - 10) <= 10) { // 直接计算动画后的数据,用于处理鼠标的快速移入移出 $(sc_data_model).attr('data-rectangleTop', sc_rectangle_model[0].offsetTop - sc_enter_change); // 设置动画进行时标志,用于处理鼠标的快速移入移出 $(sc_data_model).attr('data-anime', '1'); // 优化鼠标从数据模块移入时的动画 $(sc_data_lable_model).show(); $(sc_data_model).show(); $(sc_btn_model).show(); $(sc_rectangle_model).animate({top: sc_rectangle_model[0].offsetTop - sc_enter_change}, 500, () => { sc_rectangle_is_slide_down = false; sc_change_show(); }); } else if (sc_diff_height < 0) { // 直接计算动画后的数据,用于处理鼠标的快速移入移出 $(sc_data_model).attr('data-rectangleTop', sc_rectangle_model[0].offsetTop + sc_diff_height); // 设置动画进行时标志,用于处理鼠标的快速移入移出 $(sc_data_model).attr('data-anime', '1'); $(sc_rectangle_model).animate({top: sc_rectangle_model[0].offsetTop + sc_diff_height}, 500, () => { sc_rectangle_is_slide_down = false; // 设置动画完成标志,用于处理鼠标的快速移入移出 $(sc_data_model).attr('data-anime', '0'); }); sc_change_show(); } else { sc_change_show(); } } else { sc_change_show(); } if (sc_panel_side_fold_flag && sc_func_btn_mode !== 1) { $(sc_rectangle_model).css('border-bottom', '10px solid transparent'); } }); $(document).on('mouseleave', '.sc_long_rectangle', (e) => { if (sc_rectangle_is_slide_up) { return; } e = e || unsafeWindow.event; let sc_mouseleave_next_class_name = (e.relatedTarget && e.relatedTarget.className) || ''; if (sc_mouseleave_next_class_name === 'sc_ctx_copy_menu' || sc_mouseleave_next_class_name === 'sc_ctx_func_menu') { return; } sc_rectangle_is_slide_up = true; let sc_btn_model = document.getElementsByClassName('sc_long_buttons'); let sc_data_model = document.getElementsByClassName('sc_data_show'); let sc_data_lable_model = document.getElementsByClassName('sc_data_show label'); let sc_rectangle_model = document.getElementsByClassName('sc_long_rectangle'); let sc_list_model = document.getElementsByClassName('sc_long_list'); let sc_rectangle_top = sc_rectangle_model[0].offsetTop; sc_btn_mode_apply(); $(sc_btn_model).slideUp(500, () => { sc_rectangle_is_slide_up = false; }); if (sc_panel_side_fold_flag) { // 应对鼠标的快速移入移出时,动画进行中的情况 let sc_edge_mouse_enter_anime = $(sc_data_model).attr('data-anime'); if (sc_edge_mouse_enter_anime === '1') { sc_rectangle_top = parseInt($(sc_data_model).attr('data-rectangleTop'), 10); } if (sc_panel_side_fold_simple) { $(sc_data_lable_model).animate({opacity: 0}, 200); $(sc_data_model).slideUp(500, () => { sc_rectangle_is_slide_up = false; }); $(sc_rectangle_model).css('border-bottom', '10px solid transparent'); } else { $(sc_rectangle_model).css('border-bottom', ''); } } else { $(sc_data_lable_model).animate({opacity: 0}, 200); $(sc_data_model).slideUp(500, () => { sc_rectangle_is_slide_up = false; }); } let sc_change_height = $(sc_btn_model).outerHeight() + $(sc_data_model).outerHeight(); let sc_leave_change = sc_change_height + 20; if (sc_panel_fold_mode === 1 && !sc_panel_side_fold_simple) { sc_leave_change = $(sc_btn_model).outerHeight() + 10; } if (Math.abs(unsafeWindow.innerHeight - sc_rectangle_top - $(sc_list_model).outerHeight() - sc_change_height - 30) <= 10) { $(sc_rectangle_model).animate({top: sc_rectangle_top + sc_leave_change}, 500, () => { sc_panel_drag_store(sc_rectangle_model[0].offsetLeft, sc_rectangle_model[0].offsetTop); }); } }); $(document).on('mouseenter', '.sc_msg_head', function(e) { if (!sc_panel_side_fold_flag || sc_item_side_fold_touch_flag) { return; } let sc_fold_out_show_top = $(this).offset().top - $(this).parent().parent().parent().offset().top; $(this).parent().css('position', 'absolute'); $(this).parent().css('top', sc_fold_out_show_top); $(this).parent().css('z-index', '10'); $(this).parent().css('width', (sc_rectangle_width - 22) + 'px'); // 22 约为总padding $(this).parent().css('height', ''); if (($(this).offset().left - (unsafeWindow.innerWidth / 2)) > 0) { $(this).parent().css('left', -(sc_rectangle_width - 22 - 72 + 10)); // 22 约为总padding, 72为侧折后的宽,10为一个padding } sc_side_fold_out_one($(this).parent(), true); sc_item_side_fold_touch_flag = true; sc_item_side_fold_touch_oj = $(this).parent(); }); $(document).on('mouseleave', '.sc_msg_head', function() { if (!sc_panel_side_fold_flag) { return; } $(this).parent().css('position', ''); $(this).parent().css('top', ''); $(this).parent().css('z-index', ''); $(this).parent().css('width', '50px'); $(this).parent().css('height', '50px'); $(this).parent().css('left', ''); sc_side_fold_in_one($(this).parent()); sc_item_side_fold_touch_flag = false; sc_item_side_fold_touch_oj = {}; }); $(document).on('click', '.sc_long_item', sc_toggle_msg_body); $(document).on('click', '.sc_data_show', function(e) { if (sc_panel_side_fold_flag) { e = e || unsafeWindow.event; if (sc_panel_side_fold_simple) { sc_panel_side_fold_simple = false; open_and_close_sc_modal('已退出 侧折的极简模式 ✓', '#A7C9D3', e, 1); } else { sc_panel_side_fold_simple = true; open_and_close_sc_modal('已设置 侧折的极简模式 ✓', '#A7C9D3', e, 1); } sc_side_fold_simple_store(); if (sc_func_btn_mode === 1) { sc_rectangle_is_slide_down = false; } } }); // 侧折状态下,展开一个SC时也可以滚动 $(document).on('wheel', '.sc_long_list', function(e) { if (sc_panel_side_fold_flag && sc_item_side_fold_touch_flag) { e = e || unsafeWindow.event; let the_sc_item_mov = 60; // 60是侧折后头像框高度+间隙 if (e.originalEvent.deltaY < 0) { the_sc_item_mov = -60; } let the_sc_list = $(document).find('.sc_long_list'); the_sc_list.scrollTop(the_sc_list.scrollTop() + the_sc_item_mov); if (the_sc_list.scrollTop() !== 0 || the_sc_list.scrollTop() + the_sc_list.height() !== the_sc_list[0].scrollHeight) { sc_item_side_fold_touch_oj.css('top', sc_item_side_fold_touch_oj.position().top + the_sc_item_mov); } } }); // 折叠/展开单个消息 function sc_toggle_msg_body() { let this_sc_item_class_arr = $(this).attr('class').split(' '); let this_sc_item_dynamic_className = this_sc_item_class_arr.find((scClassName) => { return scClassName !== 'sc_long_item'; }); let this_sc_msg_body = $('.' + this_sc_item_dynamic_className).find('.sc_msg_body'); let this_sc_item_bg_color = $('.' + this_sc_item_dynamic_className).css('background-color'); if (this_sc_msg_body.is(":visible")) { this_sc_msg_body.slideUp(200); $('.' + this_sc_item_dynamic_className).css('border-radius', '8px'); this_sc_msg_body.prev().css('border-radius', '6px'); $('.' + this_sc_item_dynamic_className).find('.sc_value_font').css('color', this_sc_item_bg_color); $('.' + this_sc_item_dynamic_className).attr('data-fold', '1'); } else { $('.' + this_sc_item_dynamic_className).css('border-radius', '8px 8px 6px 6px'); this_sc_msg_body.prev().css('border-radius', '6px 6px 0px 0px'); this_sc_msg_body.slideDown(200); $('.' + this_sc_item_dynamic_className).find('.sc_value_font').css('color', ''); $('.' + this_sc_item_dynamic_className).attr('data-fold', '0'); } } // 侧折显示板 function sc_sidefold(flag = true) { $(document).find('.sc_long_rectangle').css('width', '72px'); $(document).find('.sc_long_list').css('padding-left', '11px'); $(document).find('.sc_long_item').css('width', '50px'); $(document).find('.sc_long_item').css('height', '50px'); let sc_btn_item = $(document).find('.sc_button_item'); sc_btn_item.css('margin-top', '6px'); sc_btn_item.css('margin-bottom', '0px'); sc_btn_item.css('margin-right', '0px'); let sc_btn_sidefold = $(document).find('.sc_button_sidefold'); sc_btn_sidefold.addClass('sc_button_foldback'); sc_btn_sidefold.removeClass('sc_button_sidefold'); sc_btn_sidefold.text('展开'); let sc_data_show = $(document).find('.sc_data_show'); sc_data_show.css('margin-bottom', '15px'); sc_data_show.css('height', '70px'); $(document).find('.sc_label_data_br').show(); let sc_label_high_energy_left = $(document).find('.sc_high_energy_num_left'); let sc_label_high_energy_right = $(document).find('.sc_high_energy_num_right'); let sc_label_captain_left = $(document).find('.sc_captain_num_left'); let sc_label_captain_right = $(document).find('.sc_captain_num_right'); let sc_label_num_br3 = $(document).find('.sc_label_num_br3'); let clone_sc_label_captain_right = sc_label_captain_right.last().clone(true); let clone_sc_label_num_br3 = sc_label_num_br3.last().clone(true); clone_sc_label_captain_right.css('float', 'none'); sc_data_show.append(clone_sc_label_num_br3); sc_data_show.append(clone_sc_label_captain_right); sc_label_captain_right.remove(); sc_label_num_br3.remove(); sc_label_high_energy_left.css('float', 'right'); sc_label_high_energy_right.css('float', 'none'); sc_label_captain_left.css('margin-top', '10px'); let sc_long_rectangle = $(document).find('.sc_long_rectangle'); let sc_long_buttons = $(document).find('.sc_long_buttons'); let clone_sc_data_show = sc_data_show.last().clone(true); let clone_sc_long_buttons = sc_long_buttons.last().clone(true); clone_sc_long_buttons.hide(); if (sc_panel_side_fold_simple) { clone_sc_data_show.hide(); } else { sc_long_rectangle.css('border-bottom', ''); } sc_long_rectangle.append(clone_sc_data_show); sc_long_rectangle.append(clone_sc_long_buttons); sc_data_show.remove(); sc_long_buttons.remove(); sc_side_fold_in_all(); sc_panel_fold_mode = 1; sc_panel_side_fold_flag = true; if (flag) { if (unsafeWindow.innerHeight - sc_long_rectangle.position().top < sc_panel_high + 280) { sc_long_rectangle.each(function() { $(this).css('top', unsafeWindow.innerHeight - sc_panel_high - 280); }); } sc_fold_mode_store(); sc_panel_side_fold_flag_store(); } sc_btn_mode_apply(); } // 侧折后恢复展开显示板 function sc_foldback() { $(document).find('.sc_long_rectangle').css('width', sc_rectangle_width + 'px'); $(document).find('.sc_long_list').css('padding-left', '10px'); $(document).find('.sc_long_item').css('width', ''); $(document).find('.sc_long_item').css('height', ''); let sc_btn_item = $(document).find('.sc_button_item'); sc_btn_item.css('margin-top', '15px'); sc_btn_item.css('margin-bottom', '15px'); sc_btn_item.css('margin-right', '7px'); $(document).find('.sc_button_min').css('margin-right', '0px'); let sc_btn_foldback = $(document).find('.sc_button_foldback'); sc_btn_foldback.addClass('sc_button_sidefold'); sc_btn_foldback.removeClass('sc_button_foldback'); sc_btn_foldback.text('侧折'); let sc_data_show = $(document).find('.sc_data_show'); sc_data_show.css('margin-bottom', '20px'); sc_data_show.css('height', '20px'); $(document).find('.sc_label_data_br').hide(); let sc_label_high_energy_left = $(document).find('.sc_high_energy_num_left'); let sc_label_high_energy_right = $(document).find('.sc_high_energy_num_right'); let sc_label_captain_left = $(document).find('.sc_captain_num_left'); let sc_label_captain_right = $(document).find('.sc_captain_num_right'); let sc_label_num_br3 = $(document).find('.sc_label_num_br3'); let clone_sc_label_captain_left = sc_label_captain_left.last().clone(true); let clone_sc_label_num_br3 = sc_label_num_br3.last().clone(true); clone_sc_label_captain_left.css('margin-top', '0px'); sc_data_show.append(clone_sc_label_num_br3); sc_data_show.append(clone_sc_label_captain_left); sc_label_captain_left.remove(); sc_label_num_br3.remove(); sc_label_high_energy_left.css('float', 'left'); sc_label_high_energy_right.css('float', 'left'); sc_label_captain_right.css('float', 'right'); let sc_long_rectangle = $(document).find('.sc_long_rectangle'); let sc_long_buttons = $(document).find('.sc_long_buttons'); let clone_sc_data_show = sc_data_show.last().clone(true); let clone_sc_long_buttons = sc_long_buttons.last().clone(true); sc_long_rectangle.css('border-bottom', '10px solid transparent'); sc_long_rectangle.prepend(clone_sc_data_show); sc_long_rectangle.prepend(clone_sc_long_buttons); sc_data_show.remove(); sc_long_buttons.remove(); if (unsafeWindow.innerWidth - sc_long_rectangle.position().left < sc_rectangle_width) { sc_long_rectangle.each(function() { $(this).css('left', unsafeWindow.innerWidth - sc_rectangle_width - 15); }); } sc_side_fold_out_all(); sc_panel_fold_mode = 2; sc_panel_side_fold_flag = false; sc_fold_mode_store(); sc_panel_side_fold_flag_store(); sc_menu(); } // 折叠显示板 function sc_minimize() { $(document).find('.sc_long_circle').show(); $(document).find('.sc_long_rectangle').hide(); $(document).find('.sc_long_buttons').hide(); // 优化回弹问题 sc_panel_fold_mode = 0; sc_fold_mode_store(); } // 切换主题 function sc_switch_css(flag = false) { if (flag) { sc_switch++; // 记录主题 sc_switch_store(); } let sc_rectangle = $(document).find('.sc_long_rectangle'); let sc_item = $(document).find('.sc_long_item'); let sc_list = $(document).find('.sc_long_list'); let sc_data_show = $(document).find('.sc_data_show'); let sc_button_item = $(document).find('.sc_button_item'); if (sc_switch === 0) { // 白色 sc_rectangle.css('background-color', 'rgba(255,255,255,1)'); sc_rectangle.css('box-shadow', '2px 2px 5px black'); sc_item.css('box-shadow', 'rgba(0, 0, 0, 0.5) 2px 2px 2px'); if (sc_panel_side_fold_flag) { sc_list.css('padding', '10px 14px 10px 11px'); } else { sc_list.css('padding', '10px 13px 10px 10px'); } sc_data_show.css('color', ''); sc_button_item.css('background', 'linear-gradient(90deg, #A7C9D3, #eeeeee, #5c95d7, #A7C9D3)'); sc_button_item.css('background-size', '350%'); sc_button_item.css('border', 0); $(document).find('#sc_scrollbar_style').text(` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(204,204,204,0.5); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(204,204,204,0); } `); } else if(sc_switch === 1) { // 透明 sc_rectangle.css('background-color', 'rgba(255,255,255,0)'); sc_rectangle.css('box-shadow', ''); sc_item.css('box-shadow', ''); if (sc_panel_side_fold_flag){ sc_list.css('padding', '10px 12px 10px 11px'); } else { sc_list.css('padding', '10px 11px 10px 10px'); } sc_data_show.css('color', '#ffffff'); sc_button_item.css('background', 'rgba(255,255,255,0)'); sc_button_item.css('border', '1px solid #ffffff'); $(document).find('#sc_scrollbar_style').text(` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.1); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0); } `); } else if(sc_switch === 2) { // 半透明(白0.1) sc_rectangle.css('background-color', 'rgba(255,255,255,0.1)'); sc_item.css('box-shadow', 'rgba(0, 0, 0, 0.5) 2px 2px 2px'); if (sc_panel_side_fold_flag) { sc_list.css('padding', '10px 14px 10px 11px'); } else { sc_list.css('padding', '10px 13px 10px 10px'); } sc_data_show.css('color', '#ffffff'); sc_button_item.css('background', 'linear-gradient(90deg, #A7C9D3, #eeeeee, #5c95d7, #A7C9D3)'); sc_button_item.css('background-size', '350%'); sc_button_item.css('border', 0); $(document).find('#sc_scrollbar_style').text(` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(204,204,204,0.2); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(204,204,204,0); } `); } else if(sc_switch === 3) { // 半透明(白0.5) sc_rectangle.css('background-color', 'rgba(255,255,255,0.5)'); sc_item.css('box-shadow', 'rgba(0, 0, 0, 0.5) 2px 2px 2px'); if (sc_panel_side_fold_flag) { sc_list.css('padding', '10px 14px 10px 11px'); } else { sc_list.css('padding', '10px 13px 10px 10px'); } sc_data_show.css('color', ''); sc_button_item.css('background', 'linear-gradient(90deg, #A7C9D3, #eeeeee, #5c95d7, #A7C9D3)'); sc_button_item.css('background-size', '350%'); sc_button_item.css('border', 0); $(document).find('#sc_scrollbar_style').text(` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(204,204,204,0.5); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(204,204,204,0); } `); } else if(sc_switch === 4) { // 半透明(黑色0.1) sc_rectangle.css('background-color', 'rgba(0,0,0,0.1)'); sc_rectangle.css('box-shadow', ''); sc_item.css('box-shadow', ''); if (sc_panel_side_fold_flag) { sc_list.css('padding', '10px 12px 10px 11px'); } else { sc_list.css('padding', '10px 11px 10px 10px'); } sc_data_show.css('color', '#ffffff'); sc_button_item.css('background', 'rgba(255,255,255,0)'); sc_button_item.css('border', '1px solid #ffffff'); $(document).find('#sc_scrollbar_style').text(` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.2); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0); } `); } else if(sc_switch === 5) { // 半透明(黑色0.5) sc_rectangle.css('background-color', 'rgba(0,0,0,0.5)'); sc_rectangle.css('box-shadow', ''); sc_item.css('box-shadow', ''); if (sc_panel_side_fold_flag) { sc_list.css('padding', '10px 12px 10px 11px'); } else { sc_list.css('padding', '10px 12px 10px 10px'); } sc_data_show.css('color', '#ffffff'); sc_button_item.css('background', 'rgba(255,255,255,0)'); sc_button_item.css('border', '1px solid #ffffff'); $(document).find('#sc_scrollbar_style').text(` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.2); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(255,255,255,0); } `); } else { // 白色 sc_switch = 0; sc_rectangle.css('background-color', 'rgba(255,255,255,1)'); sc_item.css('box-shadow', 'rgba(0, 0, 0, 0.5) 2px 2px 2px'); if (sc_panel_side_fold_flag) { sc_list.css('padding', '10px 14px 10px 11px'); } else { sc_list.css('padding', '10px 13px 10px 10px'); } sc_data_show.css('color', ''); sc_button_item.css('background', 'linear-gradient(90deg, #A7C9D3, #eeeeee, #5c95d7, #A7C9D3)'); sc_button_item.css('background-size', '350%'); sc_button_item.css('border', 0); $(document).find('#sc_scrollbar_style').text(` .sc_long_list::-webkit-scrollbar { width: 6px; } .sc_long_list:hover::-webkit-scrollbar-thumb { background: rgba(204,204,204,0.5); border-radius: 6px; } .sc_long_list::-webkit-scrollbar-thumb { background: rgba(204,204,204,0); } `); } } // 记忆存储 function update_sc_memory_config(config_item_name, config_item_val, type = 'self') { let sc_memory_config_key = sc_self_memory_config_key if (type === 'all') { sc_memory_config_key = 'live_sc_all_memory_config'; } let sc_memory_config = {}; let sc_memory_config_json = unsafeWindow.localStorage.getItem(sc_memory_config_key); if (sc_memory_config_json !== null && sc_memory_config_json !== 'null' && sc_memory_config_json !== '[]' && sc_memory_config_json !== '{}' && sc_memory_config_json !== '') { sc_memory_config = JSON.parse(sc_memory_config_json); } if (config_item_name === 'sc_panel_drag' && Array.isArray(config_item_val)) { sc_memory_config['sc_panel_drag_left'] = config_item_val[0] ?? -1; sc_memory_config['sc_panel_drag_top'] = config_item_val[1] ?? -1; } else { sc_memory_config[config_item_name] = config_item_val; } unsafeWindow.localStorage.setItem(sc_memory_config_key, JSON.stringify(sc_memory_config)); } function sc_switch_store() { if (sc_memory === 1) { // 题记 unsafeWindow.localStorage.setItem('live_sc_switch_record', sc_switch); } else if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_switch', sc_switch, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_switch', sc_switch, 'all'); } } function sc_fold_mode_store() { if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_panel_fold_mode', sc_panel_fold_mode, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_panel_fold_mode', sc_panel_fold_mode, 'all'); } } function sc_panel_side_fold_flag_store() { if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_panel_side_fold_flag', sc_panel_side_fold_flag, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_panel_side_fold_flag', sc_panel_side_fold_flag, 'all'); } } function sc_side_fold_simple_store() { if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_panel_side_fold_simple', sc_panel_side_fold_simple, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_panel_side_fold_simple', sc_panel_side_fold_simple, 'all'); } } function sc_panel_drag_store(sc_panel_drag_left_val, sc_panel_drag_top_val) { if (sc_panel_drag_left_val <= 0) { sc_panel_drag_left_val = 0; } if (sc_panel_drag_top_val <= 0) { sc_panel_drag_top_val = 0; } if (sc_panel_drag_left_val >= unsafeWindow.innerWidth) { if (sc_panel_fold_mode === 1) { sc_panel_drag_left_val = unsafeWindow.innerWidth - 72; } else { sc_panel_drag_left_val = unsafeWindow.innerWidth - sc_rectangle_width; } } if (sc_panel_drag_top_val >= unsafeWindow.innerHeight) { sc_panel_drag_top_val = unsafeWindow.innerHeight - sc_panel_high; } if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_panel_drag', [sc_panel_drag_left_val, sc_panel_drag_top_val], 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_panel_drag', [sc_panel_drag_left_val, sc_panel_drag_top_val], 'all'); } } function sc_func_btn_mode_store() { if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_func_btn_mode', sc_func_btn_mode, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_func_btn_mode', sc_func_btn_mode, 'all'); } } function sc_data_show_bottom_store() { if (sc_memory === 2) { // 个记 update_sc_memory_config('data_show_bottom_flag', data_show_bottom_flag, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('data_show_bottom_flag', data_show_bottom_flag, 'all'); } } function sc_panel_allow_drag_store() { if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_panel_allow_drag_flag', sc_panel_allow_drag_flag, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_panel_allow_drag_flag', sc_panel_allow_drag_flag, 'all'); } } function sc_side_fold_custom_config_store() { if (sc_memory === 2) { // 个记 update_sc_memory_config('sc_side_fold_custom_config', sc_side_fold_custom_config, 'self'); update_sc_memory_config('sc_side_fold_custom_time', sc_side_fold_custom_time, 'self'); } else if (sc_memory === 3) { // 全记 update_sc_memory_config('sc_side_fold_custom_config', sc_side_fold_custom_config, 'all'); update_sc_memory_config('sc_side_fold_custom_time', sc_side_fold_custom_time, 'all'); } } function update_sc_switch_rooms(type = 'add') { let sc_switch_memory_rooms = []; let sc_switch_memory_rooms_json = unsafeWindow.localStorage.getItem('live_sc_switch_memory_rooms'); if (sc_switch_memory_rooms_json !== null && sc_switch_memory_rooms_json !== 'null' && sc_switch_memory_rooms_json !== '[]' && sc_switch_memory_rooms_json !== '') { sc_switch_memory_rooms = JSON.parse(sc_switch_memory_rooms_json); } if (type === 'add') { sc_switch_memory_rooms.push(room_id); } else { sc_switch_memory_rooms = sc_switch_memory_rooms.filter(item => item !== room_id); } unsafeWindow.localStorage.setItem('live_sc_switch_memory_rooms', JSON.stringify(sc_switch_memory_rooms)); } // 记忆模式 function sc_memory_modify() { let sc_btn_memory = $(document).find('.sc_button_memory'); if (sc_memory === 1) { // 从[题记]切换到其他模式时,在题记房间中剔除当前房间 update_sc_switch_rooms('del'); } else if (sc_memory === 2) { // 从[个记]切换到其他模式时,删除当前的个记配置 unsafeWindow.localStorage.removeItem(sc_self_memory_config_key); } else if (sc_memory=== 3) { // 从[全记]切换到其他模式时,删除全记配置 unsafeWindow.localStorage.removeItem('live_sc_memory_all_rooms_mode'); unsafeWindow.localStorage.removeItem('live_sc_all_memory_config'); } sc_memory++; if (sc_memory === 0) { sc_btn_memory.text('没记'); } else if(sc_memory === 1) { sc_btn_memory.text('题记'); update_sc_switch_rooms('add'); // 切换到题记的配置 let sc_switch_record = unsafeWindow.localStorage.getItem('live_sc_switch_record'); if (sc_switch_record !== null && sc_switch_record !== 'null' && sc_switch_record !== '') { sc_switch = parseInt(sc_switch_record, 10); sc_switch_css(); } } else if(sc_memory === 2) { sc_btn_memory.text('个记'); // 保存个记的配置 sc_switch_store(); sc_fold_mode_store(); sc_panel_side_fold_flag_store(); sc_side_fold_simple_store(); const rect_circle = $(document).find('.sc_long_circle')[0].getBoundingClientRect(); if (rect_circle.width === 0 && rect_circle.height === 0) { const rect_rectangle = $(document).find('.sc_long_rectangle')[0].getBoundingClientRect(); sc_panel_drag_store(rect_rectangle.left, rect_rectangle.top); } else { sc_panel_drag_store(rect_circle.left, rect_circle.top); } } else if(sc_memory=== 3) { sc_btn_memory.text('全记'); unsafeWindow.localStorage.setItem('live_sc_memory_all_rooms_mode', sc_memory); // 保存全记的配置 sc_switch_store(); sc_fold_mode_store(); sc_panel_side_fold_flag_store(); sc_side_fold_simple_store(); const rect_circle = $(document).find('.sc_long_circle')[0].getBoundingClientRect(); if (rect_circle.width === 0 && rect_circle.height === 0) { const rect_rectangle = $(document).find('.sc_long_rectangle')[0].getBoundingClientRect(); sc_panel_drag_store(rect_rectangle.left, rect_rectangle.top); } else { sc_panel_drag_store(rect_circle.left, rect_circle.top); } } else { sc_memory = 0; sc_btn_memory.text('没记'); } } // 按钮模式选择 function sc_btn_mode_apply() { if (sc_panel_side_fold_flag) { if (sc_func_btn_mode === 0) { // 侧折模式下显示所有的按钮 sc_menu(); } else if (sc_func_btn_mode === 1) { // 侧折模式下隐藏所有的按钮 $(document).find('.sc_button_item').hide(); } else if (sc_func_btn_mode === 2) { // 侧折模式下按钮的极简模式 $(document).find('.sc_button_item').hide(); $(document).find('.sc_button_menu').show(); $(document).find('.sc_button_min').show(); } else if (sc_func_btn_mode === 3) { // 侧折模式下只显示折叠按钮 $(document).find('.sc_button_item').hide(); $(document).find('.sc_button_min').show(); } else if (sc_func_btn_mode === 4) { // 侧折模式下只显示菜单按钮 $(document).find('.sc_button_item').hide(); $(document).find('.sc_button_menu').show(); } sc_rectangle_is_slide_down = false; } } function sc_memory_show() { let sc_circles = $(document).find('.sc_long_circle'); let sc_rectangles = $(document).find('.sc_long_rectangle'); if (sc_panel_fold_mode) { sc_circles.each(function() { if (sc_panel_drag_left >= 0) { $(this).css('left', sc_panel_drag_left + 'px'); } if (sc_panel_drag_top >= 0) { $(this).css('top', sc_panel_drag_top + 'px'); } $(this).hide(); }); sc_rectangles.each(function() { if (sc_panel_drag_left >= 0) { $(this).css('left', sc_panel_drag_left + 'px'); } if (sc_panel_drag_top >= 0) { $(this).css('top', sc_panel_drag_top + 'px'); } if (sc_panel_fold_mode === 1 && !sc_panel_side_fold_simple) { $(document).find('.sc_data_show').show(); } $(this).slideDown(500); }); if (sc_panel_fold_mode === 1) { sc_sidefold(false); sc_btn_mode_apply(); } } else { if (sc_panel_side_fold_flag) { sc_sidefold(false); sc_btn_mode_apply(); } sc_circles.each(function() { if (sc_panel_drag_left >= 0) { $(this).css('left', sc_panel_drag_left + 'px'); } if (sc_panel_drag_top >= 0) { $(this).css('top', sc_panel_drag_top + 'px'); } }); } } // 导出 function sc_export() { let sc_localstorage_json_export = unsafeWindow.localStorage.getItem(sc_localstorage_key); if (sc_localstorage_json_export === null || sc_localstorage_json_export === 'null' || sc_localstorage_json_export === '[]' || sc_localstorage_json_export === '') { return; } else { let sc_localstorage_export = JSON.parse(sc_localstorage_json_export); let sc_export_str = ''; for (let j = 0; j < sc_localstorage_export.length; j++) { let sc_export_timestamp = '[' + getTimestampConversion(sc_localstorage_export[j]["start_time"]) + ']'; let sc_export_uname = '[ ' + sc_localstorage_export[j]["user_info"]["uname"] + ' ]'; let sc_export_uid = '[ uid: ' + sc_localstorage_export[j]["uid"] + ' ]'; let sc_export_guard_level = sc_localstorage_export[j]["user_info"]["guard_level"]; let sc_export_guard = ''; if (sc_export_guard_level === 1) { sc_export_guard = '[总督]' } else if (sc_export_guard_level === 2) { sc_export_guard = '[提督]'; } else if (sc_export_guard_level === 3) { sc_export_guard = '[舰长]'; } else { sc_export_guard = '[普通]'; } let sc_export_price = '[ ¥' + sc_localstorage_export[j]["price"] + ' ]'; let sc_export_message = '[ ' + sc_localstorage_export[j]["message"] + ' ]'; sc_export_str += sc_export_timestamp + sc_export_guard + sc_export_uid + sc_export_uname + sc_export_price + ' : ' + sc_export_message + '\n\n'; } // 创建一个Blob对象,将字符串放入其中 const sc_export_blob = new Blob([sc_export_str], { type: 'text/plain' }); // 创建一个下载链接 const sc_export_downloadLink = document.createElement('a'); sc_export_downloadLink.href = URL.createObjectURL(sc_export_blob); // 设置文件名 sc_export_downloadLink.download = 'B站SC记录_' + sc_live_room_title + '_' + getTimestampConversion((new Date()).getTime()) + '.txt'; // 将链接添加到页面中,模拟点击下载 document.body.appendChild(sc_export_downloadLink); sc_export_downloadLink.click(); // 移除链接 document.body.removeChild(sc_export_downloadLink); } } // 显示所有按钮 function sc_menu() { $(document).find('.sc_button_item').show(); $(document).find('.sc_button_menu').hide(); } let sc_custom_modal_style = document.createElement('style'); sc_custom_modal_style.textContent = ` .sc_custom_config_modal { display: none; position: fixed; z-index: 3333; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0, 0, 0, 0.3); } .sc_custom_modal_content { background-color: #fefefe; margin: 15% auto; padding: 20px; border: 1px solid #888; width: 42%; } .sc_custom_close { color: #aaa; float: right; font-size: 28px; font-weight: bold; } .sc_custom_close:hover, .sc_custom_close:focus { color: black; text-decoration: none; cursor: pointer; } .sc_custom_radio_group { display: inline-flex; } .sc_custom_radio_group_fullscreen { display: inline-flex; } .sc_custom_radio_group label { padding-right: 80px; padding-left: 10px; } .sc_custom_radio_group_fullscreen label { padding-right: 80px; padding-left: 10px; } .sc_custom_btn_div { margin-top: 30px; } .sc_custom_btn_div_fullscreen { margin-top: 30px; } .sc_custom_input_div { display: none; text-align: center; margin-top: 20px; } .sc_custom_form { margin-top: 30px; } #sc_custom_confirm_btn { float: right; } #sc_custom_confirm_btn_fullscreen { float: right; } .sc_custom_modal_btn { padding: 5px 20px; } `; document.head.appendChild(sc_custom_modal_style); let sc_custom_modal_html = document.createElement('div'); sc_custom_modal_html.id = 'sc_custom_config_div'; sc_custom_modal_html.className = 'sc_custom_config_modal'; sc_custom_modal_html.innerHTML = `
侧折模式下留言显示设置:
侧折模式下留言显示设置: