b站播放列表

1.将b站视频添加到播放列表,实现列表顺序播放、随机播放、单集循环播放(需点击播放列表里面的视频进行播放才会生效),播放列表支持移除视频、拖动排序、多选拖动排序、全选、反选、移除选中。2.本地记忆播放列表信息。3.播放完一个视频后若无法继续播放下一个视频,一般是浏览器设置问题,需要打开浏览器设置里面搜索关键词‘’‘自动播放’,设置为允许媒体自动播放

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         b站播放列表
// @namespace    http://tampermonkey.net/
// @version      2.0.0
// @description 1.将b站视频添加到播放列表,实现列表顺序播放、随机播放、单集循环播放(需点击播放列表里面的视频进行播放才会生效),播放列表支持移除视频、拖动排序、多选拖动排序、全选、反选、移除选中。2.本地记忆播放列表信息。3.播放完一个视频后若无法继续播放下一个视频,一般是浏览器设置问题,需要打开浏览器设置里面搜索关键词‘’‘自动播放’,设置为允许媒体自动播放
// @author       繁星1678
// @match        https://www.bilibili.com/video/*
// @match        https://www.bilibili.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @license      MIT
// @grant        none
// ==/UserScript==
// 正式可用
(function() {
    'use strict';
    let listContainer;
    let videoList = [];//存储videoDict
    let allVideoList = []; //存储videoDict的全部item
    let playMode = 0; // 0:顺序播放 1:随机播放 2:单集循环
    // let myList = []; // 存储用户添加的视频
    let i =1 //点击图标添加的索引
    let j =1//全部添加索引
    let currentPlayVideoTitle
    let playItemIndex = -1;
    let isDarkMode = true;
    let isPanelShow = false;
    let videoPlayList = []
    let randomIndex
    let videoListButton
    let initTitle=null
    let initPlayUrl=null
    let initPlayUrlPath=null
    class videoInfo {
        constructor(playId,firstSpanText, secondSpanText, title, playUrl) {
            this.playId = playId; // 播放ID,在b站视频合集中对应视频的索引,在合集中不变
            this.firstSpanText = firstSpanText; // 视频名称中的序号,如:P1
            this.secondSpanText = secondSpanText; // 标题,如:你好吗
            this.title = title; // 名称如:P4 你好吗
            this.playUrl = playUrl; // 视频播放链接如:https://www.bilibili.com/video/BV1Ys4y1r7Dj/
        }
    }
    
    // 获取当前页面的 URL
    let currentUrl = window.location.href;

    // 根据不同的 URL 执行不同的代码
    if (currentUrl.includes('/video/')) {
        setPlayList()
        resetPlayPanelItemShow()
        setPlayListBtn()
       
    } else if(currentUrl.includes('/www.bilibili.com/')||currentUrl.includes('/video/')){
        if(currentUrl.includes('/www.bilibili.com/')){
            let openPlayUrl=true
            createPLaylistPanel(openPlayUrl)
            resetPlayPanelItemShow()
            setPlayListBtn()
        }else{
            createPLaylistPanel()
            resetPlayPanelItemShow()
            setPlayListBtn() 
        }
        
    }
    ///////////////////////////////////
    // 提示框
    function dialog(message,x=false,y=false,second=false){

        second?second=second*1000:second=3500
        const tooltip = document.createElement('div');
        tooltip.textContent = message;
        tooltip.style.position = 'fixed';
        tooltip.style.backgroundColor = 'rgba(0, 0, 0, 0.6)';
        tooltip.style.color = '#ff9a00';
        tooltip.style.padding = '10px';
        tooltip.style.borderRadius = '5px';
        tooltip.style.zIndex = '1000';
        tooltip.style.fontSize = '20px';
        tooltip.style.fontWeight = 'bold';
        tooltip.style.textAlign = 'center'; // 居中对齐
        tooltip.style.lineHeight = '1'; // 设置行高为1,使文字垂直居中
        tooltip.style.transform = 'translate(-50%, -50%)'; // 居中显示
        tooltip.style.transition = 'opacity 0.5s ease-in-out'; // 设置过渡效果
        // tooltip.style.opacity = '0'; // 初始状态为透明
        tooltip.style.pointerEvents = 'none'; // 防止点击穿透
         // 设置默认位置
        tooltip.style.top = x ? `${x}px` : '180px';
        tooltip.style.left = y ? `${y}px` : '1150px';
        // tooltip.style.top = `${x}px` 
        // tooltip.style.left = `${y}px`
        // tooltip.style.top = x.toString()+'px'
        // tooltip.style.left = y.toString()+'px'
        document.body.appendChild(tooltip);

        setTimeout(() => {
            document.body.removeChild(tooltip);
        }, second);
    }
    // 创建笔记列表按钮并添加监听事件
    function setPlayListBtn(){

        let playListsBtn = document.querySelector('.playListsBtn');
            // 如果存在就设置监听,不存在就创造一个并设置监听
            if (playListsBtn) {
                return
                // setNoteListsBtnListener(noteListsBtn);
                // alert('noteListsBtn存在:',noteListsBtn)
            }else{
                // alert('noteListsBtn不存在')
                function createNoteListBtnAndInsertDocument(){
                   
                    if(currentUrl.includes('/video/')){
                        if(initTitle===null&&initPlayUrl===null){
                            initTitle = document.querySelector('.video-title.special-text-indent').getAttribute('data-title')
                            // initTitle=initTitle.split(' ')[1]
                            // videoEl.muted = true;//静音
                            initPlayUrl = window.location.href.trim()
                            initPlayUrlPath = window.location.pathname.trim()

                            console.log('125 innitTitle:'+initTitle)
                            console.log('125 initPlayUrl:'+initPlayUrl)
                            console.log('125 initPlayUrlPath:'+initPlayUrlPath)
                        }
                        
                    }
                    
                    let avatar_wrap = document.querySelector('.header-avatar-wrap');
                    if (avatar_wrap) {
                        // 创建 playListsBtn 元素
                        let playListsBtn = document.createElement('div');
                        playListsBtn.style.display = 'flex'; // 使用 flex 布局
                        playListsBtn.style.flexDirection = 'column'; // 设置垂直布局
                        playListsBtn.style.alignItems = 'center'; // 水平居中对齐
                        playListsBtn.style.gap = '4px'; // 设置图标和文本之间的间距
                        playListsBtn.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" width="70" height="20" viewBox="0 0 24 24" style="filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.2));"><path fill="#7a08fa" d="M7 9V7h14v2zm0 4v-2h14v2zm0 4v-2h14v2zM4 9q-.425 0-.712-.288T3 8t.288-.712T4 7t.713.288T5 8t-.288.713T4 9m0 4q-.425 0-.712-.288T3 12t.288-.712T4 11t.713.288T5 12t-.288.713T4 13m0 4q-.425 0-.712-.288T3 16t.288-.712T4 15t.713.288T5 16t-.288.713T4 17"/></svg><span style="color: #7a08fa; font-size: 13px; text-shadow: 0.1px 0.1px 0.3px rgba(0, 0, 0, 0.6);">播放列表</span>`;
                        playListsBtn.style.cursor = 'pointer';
                        playListsBtn.className = 'playListsBtn';

                        // let avatar_wrap = document.querySelector('.header-avatar-wrap');
                        // 获取 avatar_wrap 的父节点
                        let parentNode = avatar_wrap.parentNode;

                        // 获取 avatar_wrap 的父节点的第一个子节点
                        let firstChild = parentNode.firstChild;

                        // 使用 insertBefore 方法将 playListsBtn 插入到第一个子节点的下一个兄弟节点之前
                        parentNode.insertBefore(playListsBtn, firstChild.nextSibling)||parentNode.insertBefore(playListsBtn, firstChild);

                        observer.disconnect();
                        // setNoteListsBtnListener(noteListsBtn)
                        playListsBtn.addEventListener('click', function (e) {
                            
                            let playlistPanel = document.querySelector('.container.mt-5.draggable');
                            if (playlistPanel&&playlistPanel.style.display === 'none') {
                                // let isPanelShow = localStorage.getItem('isPanelShow');
                                localStorage.setItem('isPanelShow', 'true');
                                playlistPanel.style.display = 'block';
                                resetPlayPanelItemShow()
                                playItemIndex = localStorage.getItem('playItemIndex')
                                setCurrentItemBackgroundAndPlayingGifVisible()
                                videoListButton = document.querySelector('.video-list-btn')
                                // listContainer.style.display = isPanelShow
                                if (videoListButton) {
                                    videoListButton.textContent = '关闭列表'
                                }

                            }
                            
                           

                        })
                        

                    }

                }
                let observer = new MutationObserver(createNoteListBtnAndInsertDocument)
                let config = {childList: true, subtree: true}
                observer.observe(document.body, config)

            }
        }


   
    
    // let videoItem = document.querySelector('div.clickitem')||document.querySelector('divvideo-episode-card__info-title');

    function setPlayList(){
        playItemIndex = localStorage.getItem('playItemIndex')
        videoList = JSON.parse(localStorage.getItem('videoList')) || [];
        createPLaylistPanel()
        resetPlayPanelItemShow()
        setCurrentItemBackgroundAndPlayingGifVisible()
        scrollPlayItemIntoView()
        let targetNode = document.body;
        let hasExecuted = false;
        
        setTimeout(() => {
            let videoEl = document.querySelector("div.bpx-player-video-wrap > video");
            console.log('播放索引:'+playItemIndex)
            setCurrentItemBackgroundAndPlayingGifVisible()
                if(videoEl){
                    videoEl.addEventListener('ended', (event) => {
                        // console.log('视频播放结束,播放索引:'+playItemIndex);
                        event.stopImmediatePropagation();
                        playNext()
                        // setCurrentItemBackgroundAndPlayingGifVisible()
    
                    });
                }else{
                    console.log('1755 点击添加图标 未找到播放器videoEl')
                }
        }, 5000);

        const observer = new MutationObserver((mutationsList, observer) => {
            for (let mutation of mutationsList) {
                if (mutation.type === 'childList') {
                    let videoItem = document.querySelector('div.clickitem') ||
                        document.querySelector('div.video-episode-card__info-title.video-episode-card__info-title_indent')||
                        document.querySelector('.video-episode-card__info-title');
                    let listHead = document.querySelector("#multi_page > div.head-con") ||
                        document.querySelector(".video-sections-head_first-line");
                    // videoEl = document.querySelector("div.bpx-player-video-wrap > video");

                    if (listHead && videoItem && !hasExecuted) {
                        hasExecuted = true;
                        createVideoListButton()
                        // createPLaylistPanel()
                        createAddBtnForVideoItem()
                        observer.disconnect();
                        break;
                        
                    }

                }
            }
        });

        let config = { childList: true, subtree: true };

        
        setTimeout(() => {
            observer.observe(targetNode, config);
        }, 2500);

            }




    // 播放下一曲
  // 播放下一曲
    function playNext() {
        let lis1
        videoList = JSON.parse(localStorage.getItem('videoList'))
        playItemIndex = localStorage.getItem('playItemIndex')
        
        if(playItemIndex<=-1){return}
        let videoPlayListLength = videoList.length
        if(videoPlayListLength<=0){
            console.log('播放列表为空,无法播放下一曲')
            return
        }
        switch (playMode) {
            case 0: // 顺序播放
                restorePreviousPlayItemBackgroundPlayingGifVisible()
                // playItemIndex = (playItemIndex + 1) % videoPlayListLength;
                if(videoPlayListLength===1){
                    // const ul = document.querySelector('ul.list-box');
                    // let lis = ul.querySelectorAll('li');
                    // lis = Array.from(lis);
                    let ul = null;
                    let lis = [];
                    try {
                        ul = document.querySelector('ul.list-box');
                        if (ul) {
                            lis = ul.querySelectorAll('li');
                        }
                        lis = Array.from(lis);
                    } catch (error) {
                        console.error('捕获到异常:', error);
                    }

                    ///////////////////
                    let ul1 = null;
                    let lis1 = [];
                    try {
                        ul1 = document.querySelector('.video-section-list.section-0');
                        if (ul1) {
                            lis1 = ul1.querySelectorAll('.video-episode-card');
                        }
                        lis1 = Array.from(lis1);
                    } catch (error) {
                        console.error('捕获到异常:', error);
                    }
                    ///////////////////

                    if(lis.length>0){
                        if(lis[lis.length-1].secondSpanText != videoList[playItemIndex].title){
                            lis[lis.length-1].click();
                            clickLiEl(playItemIndex);
                        }else{
                            lis[lis.length-2].click();
                            clickLiEl(playItemIndex);
                        }
                    }else if(lis1.length>0){
                        let liTitle = lis1[lis1.length-1].querySelector('div.video-episode-card__info-title').getAttribute('title');
                        if(liTitle != videoList[playItemIndex].title){
                            lis1[lis1.length-1].click();
                            clickLiEl(playItemIndex);
                        }else{
                            lis1[lis1.length-2].click();
                            clickLiEl(playItemIndex);
                        }
                    }
                }else{
                    let preTitle = videoList[playItemIndex].title
                    
                    playItemIndex++
                    if(playItemIndex > videoPlayListLength-1) {
                        playItemIndex = 0;
                        clickLiEl(playItemIndex);
                        break;
                    }else if(preTitle===videoList[playItemIndex].title){
                        if(preTitle!==videoList[0].title){
                            clickLiEl(0)
                            clickLiEl(playItemIndex); 
                        }else{
                            clickLiEl(1);
                            clickLiEl(playItemIndex);
                        }
                        break;
                    }
                    clickLiEl(playItemIndex);
                    break;
                    
                }

               
                console.log('326顺序播放,播放索引是:'+playItemIndex);
                
            case 1: // 随机播放
                restorePreviousPlayItemBackgroundPlayingGifVisible()
                randomIndex = Math.floor(Math.random() * videoPlayListLength);
                if(randomIndex>videoListButton){
                    randomIndex = 0
                }
                if(randomIndex === playItemIndex){
                    if(randomIndex < videoPlayListLength-1) {
                        clickLiEl(randomIndex + 1);
                        clickLiEl(randomIndex);
                    }else{
                        clickLiEl(0);
                        clickLiEl(randomIndex);
                    }
                }else{
                    clickLiEl(randomIndex);
                    playItemIndex = randomIndex;

                }
                
                console.log('330随机播放,播放索引是:'+playItemIndex);
                // clickLiEl(playItemIndex);
                break;
            case 2: // 单集循环
                console.log('333单集循环播放索引是:'+playItemIndex);
                clickLiEl(playItemIndex);
                // 单集循环模式下,playItemIndex 不需要更新
                break;
            
        }
        localStorage.setItem('playItemIndex', playItemIndex);
        console.log('393 playnext播放索引是:'+playItemIndex);
        // clickLiEl(playItemIndex);
        let videoEl = document.querySelector("div.bpx-player-video-wrap > video");
        
        videoEl.currentTime = 0;
        // localStorage.setItem('playId', videoList[playItemIndex].playId?videoList[playItemIndex].playId:0);
        videoEl.play();
        scrollPlayItemIntoView();
        setCurrentItemBackgroundAndPlayingGifVisible()
    }

    function clickLiEl(playItemIndex){
        if(playItemIndex<=-1){return}
        localStorage.setItem('playItemIndex', playItemIndex);
        // setCurrentItemBackgroundAndPlayingGifVisible()
        videoList = JSON.parse(localStorage.getItem('videoList'));
        let videoEl = document.querySelector("div.bpx-player-video-wrap > video");
        videoEl.currentTime = 0;
        if(playItemIndex >= videoList.length){
            playItemIndex=0
        }
        
        let ul = null;
        let lis = [];

        // 获取分p列表
        try {
            ul = document.querySelector('ul.list-box');
            if (ul) {
                lis = ul.querySelectorAll('li');
            }
            lis = Array.from(lis);
        } catch (error) {
            console.error('捕获到异常:', error);
        }


        let ul1 = null;
        let lis1 = [];

    //    获取非分p列表
        try {
            ul1 = document.querySelector('.video-section-list.section-0');
            if (ul1) {
                lis1 = ul1.querySelectorAll('.video-episode-card');
            }
            lis1 = Array.from(lis1);
        } catch (error) {
            console.error('捕获到异常:', error);
        }

        // 如果分p列表不存在,跳转到对应视频播放
        if(lis.length<=0 && lis1.length<=0||!videoEl){
            window.location.href = videoList[playItemIndex].playUrl;
            videoEl.currentTime = 0;
            // videoList[playItemIndex].playId? localStorage.setItem('playId', videoList[playItemIndex].playId) : null;
            videoEl.play()
            return
        }
        // 如果分p列表存在,则点击分p列表的对应项
        if(lis.length>0){
            for(let i=0;i<lis.length;i++){
                let liTitle = lis[i].querySelector('span.part').textContent;
                if(videoList[playItemIndex].secondSpanText === liTitle){
                    lis[i].querySelector('div.clickitem').click()
                    videoEl.play()
                    console.log('点击列表项lis[i].textContent:' + lis[i].textContent);
                    return
                }
            }
        }else if(lis1.length>0){
            for(let i=0;i<lis1.length;i++){

                // const videoTitle = item.getAttribute('title');
                // querySelectorAll('div.video-episode-card__info-title').forEach(item =>

                let liTitle = lis1[i].querySelector('.video-episode-card__info-title').getAttribute('title');
                // console.log('clickLiEl liTitle:'+liTitle)
                if(videoList[playItemIndex].title === liTitle){
                    lis1[i].click()
                    videoEl.play()
                    console.log('点击列表项lis[i].textContent:' + liTitle);
                    // localStorage.setItem('playText', liTitle);
                    return
                }
            }

            
        }
        
        // videoPlayList[playItemIndex].videoElement.click()
        // localStorage.setItem('playId', videoList[playItemIndex].playId);
        // window.location.replace(videoList[playItemIndex].playUrl);
        window.location.href = videoList[playItemIndex].playUrl;
        
        videoEl.play()

        // videoEl = document.querySelector("div.bpx-player-video-wrap > video")
        // videoEl.play()
    }


    // 显示列表面板
    function showPLaylistPanel() {
        let pLaylistPanel = document.querySelector('.container.mt-5.draggable');
        isPanelShow=localStorage.getItem('isPanelShow')
        isPanelShow?pLaylistPanel.style.display='block':pLaylistPanel.style.display='none'
        console.log('showPLaylistPanel获取到的 isPanelShow:'+isPanelShow)

        let videoListButton = document.querySelector('.video-list-btn');

        if(pLaylistPanel.style.display==='block'){
            isListVisible = true;
            videoListButton.textContent = '关闭列表';
        }
    }
   
    // 更新播放列表项item显示

    function resetPlayPanelItemShow(){
        videoList = JSON.parse(localStorage.getItem('videoList')) || [];        
        if(videoList.length>0){
            // if(isAddItem){
            //     return
            // }
             // // 获取ul元素
             
             let ulElement = document.getElementById('myList');

             // 移除ul中的所有li元素
             while (ulElement.firstChild) {
                 ulElement.removeChild(ulElement.firstChild);
             }

            for (let i = 0; i < videoList.length; i++) {
                addItemToPLaylistPanel(videoList[i].title);
                console.log(i+': '+videoList[i].videoElementHtml);
            }
            // isAddItem = true;
        }
    }



    function getCrruentPlayVideoTitle(){
        if(playItemIndex>-1){
            currentPlayVideoTitle = videoList[playItemIndex].title;
            if(currentPlayVideoTitle){
                return currentPlayVideoTitle
            }else{return null}

        }else{
            return null
        }
    }

    // 创建播放列表按钮,点击弹出播放列表面板,再点击关闭播放列表面板
    function createVideoListButton() {
        let btnText
        let isPanelShow=localStorage.getItem('isPanelShow')
        if(isPanelShow==='none'){
            btnText = '播放列表';
        }else{
            btnText = '关闭列表';
        }
        

        // 创建播放列表按钮
        // const videoListButton = document.createElement('button');
        videoListButton = document.createElement('button');
        videoListButton.textContent = btnText;
        videoListButton.className = 'video-list-btn';

        // 添加按钮样式
        const style = document.createElement('style');
        style.textContent = `
            .video-list-btn {
                background-color: #3e4149;
                color: #defcf9;
                border: none;
                border-radius: 4px;
                text-align: center;
                font-size: 15px;
                cursor: pointer;
                box-shadow: 0 4px 6px rgba(0, 0, 0, 0.15);
                transition: background-color 0.3s;
            }

            .video-list-btn:hover {
                background-color: #521262;
            }

            .video-list-btn:active {
                background-color: #6639a6;
            }

            .draggable {
                cursor: move;
            }
        `;
        document.head.appendChild(style);
        getListHead()

        // 播放列表按钮点击事件
        videoListButton.addEventListener('click', () => {
            let isPanelShow = localStorage.getItem('isPanelShow');
            if(isPanelShow==='none'){
                isPanelShow = 'block';
                resetPlayPanelItemShow()
                setCurrentItemBackgroundAndPlayingGifVisible()
            }else{
                isPanelShow = 'none';
            }
            listContainer.style.display = isPanelShow
            videoListButton.textContent = isPanelShow==='block' ? '关闭列表' : '播放列表';
            localStorage.setItem('isPanelShow',isPanelShow)
           
        });

        function getListHead() {
            let listHead = document.querySelector("#multi_page > div.head-con") ||
            document.querySelector(".first-line-left")
            if (listHead) {
                listHead.style.position = 'relative';
                listHead.insertBefore(videoListButton, listHead.firstChild);

            }
            // let avatar_wrap = document.querySelector('.header-avatar-wrap');

            // let parentNode = avatar_wrap.parentNode;

            // // 获取 avatar_wrap 的父节点的第一个子节点
            // let firstChild = parentNode.firstChild;

            // // 使用 insertBefore 方法将 playListsBtn 插入到第一个子节点的下一个兄弟节点之前
            // parentNode.insertBefore(playListsBtn, firstChild.nextSibling)||parentNode.insertBefore(playListsBtn, firstChild);
        }

    }


    // 停止播放
    function stopVideo(){
        let videoEl = document.querySelector("div.bpx-player-video-wrap > video") // 获取视频元素
        videoEl.pause();
        videoEl.currentTime = 0;
    }

    // 如果列表项有选中状态的项就返回true,否则返回false
    function hasCheckedCheckbox() {
        const checkboxes = document.querySelectorAll('li.list-item input[type="checkbox"]');
        for (let checkbox of checkboxes) {
            if (checkbox.checked) {
                return true;
            }
        }
        return false;
    }


    // 将上一个播放项的背景色还原为透明浅蓝色,并将playing-gif隐藏
    function restorePreviousPlayItemBackgroundPlayingGifVisible(){
        if(playItemIndex<=-1){
            return
        }
        let myList = document.getElementById('myList');
        let listItems = myList.getElementsByTagName('li');
        if(listItems.length===0){return}
        let previousPlayItem = listItems[playItemIndex]
        if(isDarkMode){
            previousPlayItem?previousPlayItem.style.color='#ba52ed':console.log("没有找到播放项");
        }else{
            previousPlayItem?previousPlayItem.style.color='#311d3f':console.log("没有找到播放项");
        }

        previousPlayItem?previousPlayItem.querySelector('.playing-gif').style.display = 'none':console.log("没有上一个播放项");

    }

     // 设置当前播放项动图playing-gif为显示状态 设置item背景色
     function setCurrentItemBackgroundAndPlayingGifVisible() {
        // playItemIndex = localStorage.getItem('playItemIndex')
        if(playItemIndex<=-1){
            return
        }
        let myList = document.getElementById('myList');
        let listItems = myList.getElementsByTagName('li');
        let CurrentPlayItem = listItems[playItemIndex]


        CurrentPlayItem?CurrentPlayItem.style.color='#ff9a00':console.log("没有找到播放项");
        CurrentPlayItem?CurrentPlayItem.querySelector('.playing-gif').style.display = 'inline':console.log("没有找到播放项");

    }

    // 将播放项滚动到视图中
    function scrollPlayItemIntoView() {
        if(playItemIndex<=-1){
            return
        }
        let myList = document.getElementById('myList');
        let listItems = myList.getElementsByTagName('li');
        if(listItems.length>0){
            let CurrentPlayItem = listItems[playItemIndex]
            if(CurrentPlayItem){
                CurrentPlayItem.scrollIntoView({ behavior: 'smooth', block: 'center' });
            }else{console.log("CurrentPlayItem")}
        }

    }

// 创建播放列表,添加列表项,相关按钮,播放列表项点击事件,播放列表项拖拽排序事件


    // 获取选中的列表项,将其文本组成一个数组,将其文本组成一个数组

    function getCheckedItemsTextAndIndex() {
        // 获取所有被勾选的 checkbox
        const checkboxes = document.querySelectorAll('input[type="checkbox"]:checked');

        // 获取所有 li 元素
        const listItems = document.getElementById('myList').getElementsByTagName('li');

        // 创建两个数组来存储文本和索引
        let texts = [];
        let indices = [];

        // 遍历被勾选的 checkbox,获取对应的 li 元素的文本和索引
        checkboxes.forEach(checkbox => {
            const parentLi = checkbox.closest('li');
            if (parentLi) {
                const index = Array.from(listItems).indexOf(parentLi);
                texts.push(parentLi.textContent.trim());
                indices.push(index);
            }
        });

        // 根据索引从小到大排序
        indices.sort((a, b) => a - b);
        texts.sort((a, b) => indices[texts.indexOf(a)] - indices[texts.indexOf(b)]);

        // console.log('文本数组:', texts);
        // console.log('索引数组:', indices);
        return {texts, indices};


    }



    // 切换主题
    function toggleTheme() {
        const elements = document.querySelectorAll('.list-item');


        // 遍历所有找到的元素
        if (isDarkMode) {
            // 替换类名 "dark-mode-list-group-item" 为 "list-group-item"
            elements.forEach((element, index) => {
                element.classList.replace('dark-mode-list-group-item', 'list-group-item');
                // if (playItemIndex > -1 && playItemIndex === index) {
                //     element.style.color = '#a3de83';
                // }
            });
            event.target.textContent = "透明";

        } else {
            // 替换类名 "list-group-item" 为 "dark-mode-list-group-item"
            elements.forEach((element, index) => {
                element.classList.replace('list-group-item', 'dark-mode-list-group-item');
                // if (playItemIndex > -1 && playItemIndex === index) {
                //     element.style.color = '#005691';
                // }
            });
            event.target.textContent = "暗黑";
        }

    }

      // 点击+向播放列表面板添加列表项,同时提取所有li的视频名称 索引号 li元素存放在数组中
      function addItemToPLaylistPanel(itemText) {

        // <img src="//i0.hdslb.com/bfs/static/jinkela/video/asserts/playing.gif" style=""></img>

         // 创建播放动图<img> 元素并设置其属性
        const imgElement = document.createElement('img');
        imgElement.src = "//i0.hdslb.com/bfs/static/jinkela/video/asserts/playing.gif";
        imgElement.className = 'playing-gif';
        imgElement.style.cssText = "color:#ff7c38;display: none; height: 17px; width: 17px; margin-right: 7px; vertical-align: middle;";

        const newItem = document.createElement('li');
        newItem.classList.add('list-item','dark-mode-list-group-item');
        // newItem.className = 'dark-mode-list-group-item';
        newItem.draggable = true;
        // newItem.textContent = `${itemText}`;
        // newItem.style.backgroundColor = 'rgba(0, 0, 0, 0.8)'
        newItem.title = '点击播放,拖动排序,多选拖动排序';
        // newItem.style.color = '#ba52ed'

         // 创建一个文本节点
        const textNode = document.createTextNode(itemText);
        // const numNode = document.createTextNode(itemText);
    //    document.querySelector('.video-num')
        // numNode.className = 'video-num';
        // numNode.textContent=`${itemNum}`
        // textNode.className = 'video-name';
        textNode.textContent = `${itemText}`
        // 将 img 元素和文本节点添加到 newItem 中
        // newItem.appendChild(numNode);
        newItem.appendChild(imgElement);
        
        newItem.appendChild(textNode);

        // 创建一个包含 SVG 图标和多选框的容器
        const iconContainer = document.createElement('span');
        iconContainer.style.float = 'right'; // 将容器浮动到右边
        // iconContainer.style.display = 'inline-block';
        iconContainer.style.alignItems = 'center'; // 垂直居中对齐

        // 创建 SVG 图标,移除播放列表条目
        const svgIcon = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
        svgIcon.setAttribute('width', '24');
        svgIcon.setAttribute('height', '24');
        svgIcon.setAttribute('viewBox', '0 0 12 12');
        const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
        path.setAttribute('fill', '#ba52ed');
        path.setAttribute('d', 'M5 3h2a1 1 0 0 0-2 0M4 3a2 2 0 1 1 4 0h2.5a.5.5 0 0 1 0 1h-.441l-.443 5.17A2 2 0 0 1 7.623 11H4.377a2 2 0 0 1-1.993-1.83L1.941 4H1.5a.5.5 0 0 1 0-1zm3.5 3a.5.5 0 0 0-1 0v2a.5.5 0 0 0 1 0zM5 5.5a.5.5 0 0 1 .5.5v2a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5M3.38 9.085a1 1 0 0 0 .997.915h3.246a1 1 0 0 0 .996-.915L9.055 4h-6.11z');
        svgIcon.appendChild(path);

        // 设置 SVG 图标的点击事件监听器
        svgIcon.addEventListener('click', () => {
            // 获取 SVG 图标的父元素(即包含它的 <li> 元素)
            const parentLi = svgIcon.closest('li');
            if (parentLi) {
                // 获取被移除的 <li> 元素的索引
                const listItems = document.getElementById('myList').getElementsByTagName('li');
                // 被删列表项索引
                const index = Array.from(listItems).indexOf(parentLi);

                // console.log(`被移除的 <li> 元素的索引: ${index}`);

                // 从 DOM 中移除 <li> 元素
                parentLi.remove();

                videoList.splice(index, 1);


                // videoPlayList.splice(index, 1)
                // liElList.splice(index,1)
                // 当删除播放列表面板列表项时需要更新playItemIndex,才能正确播放对应列表项
                // saveVideoList()


                if (index < playItemIndex) {
                    playItemIndex--;
                } else if (index === playItemIndex) {
                    // 如果当前播放的列表项被删除,则停止播放
                    playItemIndex = -1;
                    stopVideo();
                }
                localStorage.setItem('playItemIndex', playItemIndex);
                let count=0
                if(videoList.length>0){
                    count=videoList.length
                }
                count=count>0?'总计:'+count:'点击视频左边+号添加'
                let tip = document.querySelector('.text-tip')
                if(tip){
                    tip.textContent=count
                }

            }
            
            // saveVideoListToLocalStorage(videoList)
            localStorage.setItem('videoList', JSON.stringify(videoList));
            // updateVideoPlayList()
            // localStorage.setItem('playItemIndex', playItemIndex);
            // saveVideoList(); // 保存数据到本地
            // saveVideoListToLocalStorage(videoList)
            // saveLiElListToLocalStorage()
            let selectAllItemBtn = document.querySelector("#selectAllItem");
            hasCheckedCheckbox()?selectAllItemBtn.textContent="反选":selectAllItemBtn.textContent="全选"

        });

        // 创建多选框
        const checkbox = document.createElement('input');
        checkbox.type = 'checkbox';
        checkbox.style.height = "20px";
        checkbox.style.width = "18px";
        checkbox.style.color = '#f5c7f7';
        checkbox.style.marginLeft = '8px'; // 添加一些间距

        // 将 SVG 图标和多选框添加到容器中
        iconContainer.appendChild(svgIcon);
        iconContainer.appendChild(checkbox);


        // 添加 change 事件监听器
        checkbox.addEventListener('change', (event) => {

            let selectAllItemBtn = document.querySelector("#selectAllItem");
            hasCheckedCheckbox()?selectAllItemBtn.textContent="反选":selectAllItemBtn.textContent="全选"

            // console.log('复选框状态发生变化:', event.target.checked);
        });

        // 添加 click 事件监听器
        checkbox.addEventListener('click', (event) => {

            let selectAllItemBtn = document.querySelector("#selectAllItem");
            hasCheckedCheckbox()?selectAllItemBtn.textContent="反选":selectAllItemBtn.textContent="全选"
            // console.log('复选框被点击:', event.target.checked);
        });

        // 将容器添加到 <li> 元素中
        newItem.appendChild(iconContainer);

        // let myList = document.getElementById('myList').appendChild(newItem);
        let myList = document.getElementById('myList')
        if(myList){
            myList.appendChild(newItem);
        }else{console.log("770没有找到播放列表")}

        let count=0
        if(videoList.length>0){
            count=videoList.length
        }
        count=count>0?'总计:'+count:'点击视频左边+号添加'
        let tip = document.querySelector('.text-tip')
        if(tip){
            tip.textContent=count
        }

    }
    // 创建播放列表面板
    function createPLaylistPanel(openPlayUrl=false) {
        let count=0
        videoList = JSON.parse(localStorage.getItem('videoList'));
        if(videoList.length>0){
            count=videoList.length
        }
        count=count>0?'总计:'+count:'点击视频左边+号添加'
        let isPanelShow = localStorage.getItem('isPanelShow') || 'block';
        
        let playModeBtnText;
        try {
            playModeBtnText = localStorage.getItem('playModeBtnText') || '顺序播放';
            if (playModeBtnText === '顺序播放') {
                playMode = 0;
            } else if (playModeBtnText === '随机播放') {
                playMode = 1;
            } else if (playModeBtnText === '单集循环') {
                playMode = 2;
            } else {
                playMode = 0;
            }
        } catch (error) {
            console.error('Error while setting play mode:', error);
            playMode = 0; // 默认设置为顺序播放
        }
        
        // 创建一个带有样式的列表容器
        listContainer = document.createElement('div');
        // listContainer.style.width = '500px';
        // listContainer.style.minWidth = '470px';
        listContainer.style.width = 'fit-content';

        listContainer.style.height = '600px';
        listContainer.style.left = '700px';
        listContainer.style.top = '200px';
        listContainer.style.zIndex = '999999';
        listContainer.style.overflowY = 'scroll';
        // listContainer.style.overflowX = 'hidden';
        listContainer.style.alignItems = 'center';
        listContainer.style.backgroundColor = 'rgba(255, 255, 255, 0)';
        listContainer.style.borderRadius = '6px';
        listContainer.style.display = isPanelShow; // 隐藏或显示
        listContainer.style.position = 'fixed'; // 自适应固定在可见位置
        // listContainer.style.flexDirection = 'column';
        listContainer.style.boxShadow = '0 8px 5px rgba(0, 0, 0, 0.5)'; // 添加边框阴影
        listContainer.className = 'container mt-5 draggable'; // 添加容器类和可拖动类
        listContainer.innerHTML = `
        <div style="position: sticky; top: 0; background-color: rgba(0, 0, 0, 0);margin-bottom: 10px;justify-content: space-between;align-items: center;">
            <button type="button" class="btn btn-primary" id="closePlaylist">关闭列表</button>
            <button type="button" class="btn btn-primary" id="playMode">${playModeBtnText}</button>
            <button type="button" class="btn btn-primary" id="removeItem">移除选中</button>
            <button type="button" class="btn btn-primary" id="selectAllItem">全选</button>
            <button type="button" class="btn btn-primary" id="addAllItem">全部添加</button>
            <button type="button" class="btn btn-primary" id="toggleStyleBtn">暗黑</button>
            <svg class="btn btn-svg" id="addVideoBtn" xmlns="http://www.w3.org/2000/svg" width="45" height="24" viewBox="0 0 24 24" style="margin-right: 10px;" title="添加到播放列表"><path fill="#000000" d="M11 13H5v-2h6V5h2v6h6v2h-6v6h-2z"/></svg>
            <span class="text-tip">${count}</span>
        </div>
        <ul class="list-group myList" id="myList">
        </ul>
        `;

         // 添加 CSS 样式
         const style = document.createElement('style');
         style.textContent = `
             .list-group myList{
                 margin-top: 10px;
             }
              .text-tip {
                 margin-right: 8px;
                 font-size: 18px;
                 color: #7e6bc4;
                 font-weight: bold;
                 vertical-align: middle;
             }
             .btn.btn-primary{
                 cursor: pointer; /* 设置鼠标指针为小手 */
                 border-radius: 5px;
                 margin-right: 6px;
                 height: 30px;
                 text-align: center;
                 font-size: 14px;
                 color: #c5e3f6; /* 设置字体颜色 */
                 background-color: #48466d; /* 设置背景颜色 */
             }
             .btn-svg {
                cursor: pointer;
                background-color: #11999e;
                border: 1px solid #007bff;
                border-radius: 0.25rem;
                vertical-align: middle;
                
            }
            .btn-svg:hover {
                background-color: #3f72af;
                border-color: #004085;
            }
                  /* 基本样式 */
                ul {
                    list-style-type: none;
                    padding: 0;
                }
                .list-group-item {
                    cursor: pointer; /* 设置鼠标指针为小手 */
                    margin-bottom: 6px; /* 设置li的行距 */
                    background-color: rgba(186, 82, 237, 0.26);
                    font-size: 16px; /* 设置字体大小 */
                    border-radius: 6px; /* 圆角边框 */
                    border: 1.4px solid #a82ffc;
                    color:#311d3f;
                    padding: 5px;
                    margin: 5px;
                    transition: box-shadow 0.3s ease;
                }
                .dark-mode-list-group-item {
                    background-color: rgba(0, 0, 0, 0.75);
                    cursor: pointer; /* 设置鼠标指针为小手 */
                    margin-bottom: 6px; /* 设置li的行距 */
                    font-size: 16px; /* 设置字体大小 */
                    border-radius: 6px; /* 圆角边框 */
                    border: 1.4px solid #a82ffc;
                    color: #ba52ed; /* 设置字体颜色 */
                    padding: 5px;
                    margin: 5px;
                    transition: box-shadow 0.3s ease;
                }
                /* 鼠标悬停时的阴影效果 */
                .list-item:hover {
                    box-shadow: 5px 5px 10px rgba(255, 201, 60, 0.68);
                }
         `;
         document.head.appendChild(style);



        let currentSelectedItem = null; // 用于跟踪当前被选中的 <li> 元素
        let isSelctedAll = false; // 用于跟踪是否全选


        // 为item创建拖动排序
        //////////////////////////////////
        // 在 listContainer 上添加拖动事件监听器
        let isDraggingListContainer = false;
        let offsetX = 0;
        let offsetY = 0;

        // 在 listContainer 上添加拖动事件监听器
        listContainer.addEventListener('dragstart', dragStart);
        listContainer.addEventListener('dragover', dragOver);
        listContainer.addEventListener('drop', drop);
        listContainer.addEventListener('dragenter', dragEnter);
        listContainer.addEventListener('dragleave', dragLeave);
        listContainer.addEventListener('dragend', dragEnd);

        let dragSrcEl;
        let LiTextsList
        let LiIndexList
        let checkedItemNum

        let dropIndex
        let dropText
        let ul
        let moveItemList
        let moveItem

        function dragStart(e) {
            if (e.target.tagName === 'LI') {
                dragSrcEl = []; // 将 dragSrcEl 改为数组
                LiTextsList = [];
                LiIndexList = [];

                checkedItemNum = 0;
                const result = getCheckedItemsTextAndIndex();
                LiTextsList = result.texts;
                LiIndexList = result.indices;
                checkedItemNum = LiTextsList.length;
                // console.log('被拖动的项目数量' + checkedItemNum);
                // console.log('被拖动的项目索引' + LiIndexList);

                if (checkedItemNum) {
                    let combinedHtml = '';
                    for (let i = 0; i < checkedItemNum; i++) {
                        let videoListIndex = LiIndexList[i];
                        let selectedLi = document.querySelector(`#myList li:nth-child(${videoListIndex})`);
                        // selectedLi.style.backgroundColor = '#87ceeb'; // 修改背景色
                        dragSrcEl.push(selectedLi); // 将选中的 li 元素添加到 dragSrcEl 数组中
                        combinedHtml += selectedLi.outerHTML; // 将每个选中的 li 元素的 HTML 内容添加到 combinedHtml 中
                    }
                    e.dataTransfer.effectAllowed = 'move';
                    e.dataTransfer.setData('text/html', combinedHtml); // 将合并后的 HTML 内容设置为数据传输对象的数据
                    dragSrcEl.forEach(element => {
                        element.style.opacity = '1';
                    });
                }else{
                    dragSrcEl = e.target;
                    dragSrcEl.style.opacity = '1';



                    e.dataTransfer.effectAllowed = 'move';
                    e.dataTransfer.setData('text/html', e.target.innerHTML);
                }





            }

        }

        function dragEnter(e) {
            if (e.target.tagName === 'LI') {
                e.target.classList.add('over');
            }
        }

        function dragLeave(e) {
            if (e.target.tagName === 'LI') {
                e.target.classList.remove('over');
            }
        }

        function dragOver(e) {
            if (e.preventDefault) {
                e.preventDefault();
            }
            e.dataTransfer.dropEffect = 'move';
            return false;
        }


        function drop(e) {
            if (e.stopPropagation) {
                e.stopPropagation();
            }
            // if (dragSrcEl !== e.target && e.target.tagName === 'LI') {
                // 获取 ul 元素

                ul = e.target.parentNode;
                // 获取所有的 li 元素
                const listItems = ul.getElementsByTagName('li');
                // 找到拖动元素和目标元素的索引
                const dragIndex = Array.from(listItems).indexOf(dragSrcEl);
                // console.log("拖动元素的索引: " + dragIndex);

                    // ul = e.target.parentNode;
                    // 获取所有的 li 元素
                    // const listItems = ul.getElementsByTagName('li');
                dropIndex = Array.from(listItems).indexOf(e.target);
                    // console.log("目标元素的索引: " + dropIndex);
                // console.log("目标元素的索引: " + dropIndex);
                dropText = videoList[dropIndex].title;// 获取目标元素的文本
                // console.log('目标元素文本: ' + dropText);

                ul.innerHTML = '';
                // // 交换 videoList 中的元素位置



                     moveItemList = []
                    let moveItem = null;
                    // let moveLiList = []
                    // let moveLi = null;
                // // ///////////////////
                if(checkedItemNum>0){
                    currentPlayVideoTitle = getCrruentPlayVideoTitle()
                    for(let i=0;i<checkedItemNum;i++){
                        let videoListIndex = LiIndexList[i]
                        // console.log('被拖动的项目索引'+videoListIndex)
                        // let moveItem = videoList.splice(videoListIndex,1)[0]
                        moveItem = videoList[videoListIndex];

                        // moveLi = liElList[videoListIndex];
                        // videoList.splice(videoListIndex, 1);
                        // console.log('被拖动的项目'+moveItem)
                        // console.log('被拖动的项目标题'+moveItem.title)
                        moveItemList.push(moveItem)

                        // moveLiList.push(moveLi)
                    }
                    LiIndexList.sort((a, b) => b - a);//数组元素从大到小排序
                //     /*目标项目的位置在原来数组中的索引是dropIndex,判断被拖动的项目在原数组最小索引的元素是否在目标元素之前,
                // 如果是,是从上往下拖,会删除拖动的元素,删除后索引号会减1,拖到目标项目之后,则拖动后的位置是新数组中目标元素索引+1处即insertIndex+1,
                // 如果被拖动项目在原数组中的索引大于目标项目在原数组中的索引,即被拖动元素在目标元素之后,是从下往上拖,
                // ,拖动目标项目之前,则拖动后的位置是目标元素在新数组中的索引是insertIndex

                // 原数组目标项目索引:dropIndex
                // 原数组拖动项目最小索引:LiIndexList[LiIndexList.length-1]
                // */
                //     // console.log('被拖动的项目索引列表中最大值: ' + LiIndexList[0])
                //     // console.log('被拖动的项目索引列表中最小值: ' + LiIndexList[LiIndexList.length-1])
                    LiIndexList.forEach((index) => {
                        videoList.splice(index, 1);

                        // liElList.splice(index, 1);
                    })



                //     // 根据目标元素文本求出其在被删减后的videoList中的索引,再根据索引进行插入
                //     // 从上往下拖,是插入到insertIndex+1位置,从下往上拖,是插入到insertIndex位置
                setTimeout(() => {
                    let insertIndex = videoList.findIndex(video => video.title === dropText);
                    // console.log('新数组目标项目索引是:'+insertIndex)
                    if (LiIndexList[LiIndexList.length-1] < dropIndex) {
                        // 从上往下拖动,是插入到insertIndex+1位置
                        insertIndex=insertIndex+1
                        videoList.splice(insertIndex, 0, ...moveItemList);

                        // liElList.splice(insertIndex, 0, ...moveLiList);


                    }else if(LiIndexList[LiIndexList.length-1] > dropIndex){
                        // 从下往上拖动,是插入到insertIndex-1位置
                        videoList.splice(insertIndex, 0, ...moveItemList);

                        // liElList.splice(insertIndex, 0, ...moveLiList);
                    }

                    videoList.forEach((item) => {
                        addItemToPLaylistPanel(item.title);
                    })
                    playItemIndex = videoList.findIndex(item => item.title === currentPlayVideoTitle);
                    if(playItemIndex>-1){
                        setCurrentItemBackgroundAndPlayingGifVisible()
                    }else{console.log('没有播放视频')}
                    // localStorage.setItem('playItemIndex', playItemIndex);
                    saveVideoListToLocalStorage(videoList)
                    // updateVideoPlayList()
                    // playItemIndex?setCurrentItemBackgroundAndPlayingGifVisible():console.log('没有播放视频');
                    // setCurrentItemBackgroundAndPlayingGifVisible()
                    // console.log('拖动结束后的videoList.length: ', videoList.length);

                    // saveVideoList()
                    // saveVideoListToLocalStorage(videoList)
                    // saveLiElListToLocalStorage()
                    // localStorage.setItem('playItemIndex', playItemIndex);
                },5)

        }else{

            currentPlayVideoTitle = getCrruentPlayVideoTitle()
            let dragItem = videoList.splice(dragIndex, 1)[0];//将拖动项从列表中删除
            // let dragLi = liElList.splice(dragIndex, 1)[0];//将拖动项从列表中删除
            if(dragIndex<dropIndex){
                let insertIndex = videoList.findIndex(video => video.title === dropText)+1;

                // let insertIndex = videoList.findIndex(video => video.title === dropText);
                videoList.splice(insertIndex, 0, dragItem);//将拖动项添加到目标位置,对应的是播放面板上面拖到的位置
                // console.log('从上往下拖动目标元素索引dropIndex是dragIndex:'+dropIndex);
                // console.log('从上往下拖动目标元素索引dropIndex是:'+dropIndex);
                //////////////////
                // liElList.splice(dropIndex, 0, dragLi);//将拖动项添加到目标位置,对应的是播放面板上面拖到的位置
                //////////////////
            }else if(dragIndex>dropIndex){
                // let dragItem = videoList.splice(dragIndex, 1)[0];//将拖动项从列表中删除
                console.log('从下往上拖动目标元素的索引dropIndex是:'+dropIndex);
                let insertIndex = videoList.findIndex(video => video.title === dropText);

                videoList.splice(insertIndex, 0, dragItem);//将拖动项添加到目标位置,对应的是播放面板上面拖到的位置
                ////////////
                // liElList.splice(insertIndex, 0, dragLi);//将拖动项添加到目标位置,对应的是播放面板上面拖到的位置
                ////////////
            }

             videoList.forEach((item) => {
                    addItemToPLaylistPanel(item.title);
                })
            if(currentPlayVideoTitle){
                playItemIndex = videoList.findIndex(item => item.title === currentPlayVideoTitle);
                // playItemIndex?setCurrentItemBackgroundAndPlayingGifVisible():console.log('没有播放视频');
                if(playItemIndex>-1){
                    setCurrentItemBackgroundAndPlayingGifVisible()
                }else{console.log('没有播放视频')}
            }
            // saveVideoList()
            // saveVideoListToLocalStorage(videoList)
            // saveLiElListToLocalStorage()
            localStorage.setItem('playItemIndex', playItemIndex);

            saveVideoListToLocalStorage(videoList)
            // updateVideoPlayList()

        }

            return false;
     }

        function dragEnd(e) {
            if (e.target.tagName === 'LI') {
                e.target.classList.remove('over');
            }

        }


        // 拖动 listContainer 的事件处理
        listContainer.addEventListener('mousedown', (event) => {
            if (!event.target.matches('li')) {
                isDraggingListContainer = true;
                offsetX = event.clientX - listContainer.offsetLeft;
                offsetY = event.clientY - listContainer.offsetTop;
            }
        });

        document.addEventListener('mousemove', (event) => {
            if (isDraggingListContainer) {
                listContainer.style.left = `${event.clientX - offsetX}px`;
                listContainer.style.top = `${event.clientY - offsetY}px`;
            }
        });

        document.addEventListener('mouseup', () => {
            isDraggingListContainer = false;
        });


        // 为列表项添加点击事件监听器,点击歌曲条目播放
        listContainer.addEventListener('click', (event) => {
            
            // 如果点击播放列表项
            if (event.target.matches('.list-item')) {
                // let clickedIndex

                restorePreviousPlayItemBackgroundPlayingGifVisible()
                currentSelectedItem = event.target; // 记录当前被选中的 <li> 元素

                console.log('点击的列表项:', currentSelectedItem);
                // alert('点击的列表项:', currentSelectedItem);
                // const ul = document.querySelector('ul.list-box');
                // let lis = ul.querySelectorAll('li');
                // lis = Array.from(lis);


                // currentSelectedItem.style.backgroundColor = 'skyblue'; // 设置被选中元素的背景颜色

                // // 获取 ul 元素
                let myList = document.getElementById('myList');

                // // 获取所有的 li 元素
                let listItems = myList.getElementsByTagName('li');

                 // 获取被点击的 li 元素的索引
                // let clickedIndex = Array.from(listItems).indexOf(event.target);
                let clickedIndex = Array.from(listItems).indexOf(currentSelectedItem);

                console.log('点击的 li 元素的索引:', clickedIndex);
                // alert('点击的 li 元素的索引:', clickedIndex);

                // 点击列表项时提取 PNumber
                let textContent = currentSelectedItem.textContent;
                // 点击列表项时获取列表项的索引作为播放列表项索引
                // playItemIndex = Number(textContent.split('.')[0]) - 1;
                playItemIndex = clickedIndex;
                // setCurrentItemBackgroundAndPlayingGifVisible()
                
                if(openPlayUrl){
                    
                    window.open(videoList[playItemIndex].playUrl)
                }else{
                    clickLiEl(playItemIndex)

                }
                // clickLiEl(playItemIndex)

                
                localStorage.setItem('playItemIndex', playItemIndex);

                setCurrentItemBackgroundAndPlayingGifVisible()
                // alert(`点击了: ${textContent},播放索引: ${playItemIndex}`);
                // alert(`videoPlayList歌曲数量: ${videoPlayList.length}`)
                // 保存变量到localStorage
                // isPanelShow = true; // 显示播放列表面板
                // localStorage.setItem('isPanelShow', true);



                // console.log('点击列表项playItemIndex:' + playItemIndex);
                // let match = textContent.match(/P(\d+)/);
                // videoPlayList[playItemIndex].videoElement.click();

                // console.log('点击的videoPlayList[playItemIndex].videoElement:' + videoPlayList[playItemIndex].videoElement);
                // liElList[playItemIndex].click()  //哪里弄错了,另外上传者视频无法播放
                // clickLiEl()

                // liElList[playItemIndex].click()
                // for(let i=0;i<lis.length;i++){
                //     let liTitle = lis[i].querySelector('span.part').textContent;
                //     if(videoList[playItemIndex].secondSpanText === liTitle){
                //         lis[i].querySelector('div.clickitem').click()
                //         console.log('点击列表项lis[i].textContent:' + lis[i].textContent);
                //         videoEl = document.querySelector("div.bpx-player-video-wrap > video")
                //         videoEl.play()

                //     }
                // }
                // console.log('点击列表项videoList[playItemIndex].title:' + videoList[playItemIndex].title);
                
                // videoEl.play()
                // setTimeout(() => {
                //     videoEl.play()
                //     setCurrentItemBackgroundAndPlayingGifVisible()
                // }, 4000);

                // 如果点击了关闭播放列表按钮.video-list-btn
            } else if (event.target.matches('#closePlaylist')) {
                // let videoListButton = document.querySelector('.video-list-btn')

                let isPanelShow = localStorage.getItem('isPanelShow');
                if(isPanelShow==='none'){
                    isPanelShow = 'block';
                }else{
                    isPanelShow = 'none';
                }
                videoListButton = document.querySelector('.video-list-btn')
                // listContainer.style.display = isPanelShow
                if (videoListButton) {
                    videoListButton.textContent = isPanelShow==='block' ? '关闭列表' : '播放列表';
                }
                // localStorage.setItem('isPanelShow',isPanelShow)

                let playlistPanel = document.querySelector('.container.mt-5.draggable');
                playlistPanel.style.display = 'none';
                
                localStorage.setItem('isPanelShow', 'none');
                

                // 如果点击了播放模式按钮
            } else if (event.target.matches('#playMode')) {
                playMode = (playMode + 1) % 3;
                // playMode++

                // if(playMode>2){playMode=0}
                // console.log("播放模式按钮被点击,当前playMode是:"+playMode);
                if (playMode === 0) {
                    event.target.textContent = "顺序播放";
                    playModeBtnText='顺序播放'
                    localStorage.setItem('playMode', 0);

                    // alert("已开启顺序播放,playMode: "+playMode);
                } else if (playMode === 1) {
                    event.target.textContent = "随机播放";
                    playModeBtnText='随机播放'
                    localStorage.setItem('playMode', 1);

                    // alert("已开启随机播放,playMode: "+playMode);
                } else if (playMode === 2) {
                    event.target.textContent = "单集循环";
                    localStorage.setItem('playMode', 2);

                    playModeBtnText='单集循环'

                    // alert("已开启单集循环,playMode: "+playMode);
                }
                // alert(`点击了: ${event.target.textContent}`);
                localStorage.setItem('playModeBtnText', playModeBtnText);

                console.log("1388播放模式按钮被点击,当前playMode是:"+localStorage.getItem('playMode'));
                // 如果点击了全选按钮

                // 如果点击了全选按钮
            } else if (event.target.matches('#selectAllItem')) {

                isSelctedAll = !isSelctedAll;

                const checkboxes = listContainer.querySelectorAll('input[type="checkbox"]');

                checkboxes.forEach(checkbox => {
                    checkbox.checked = !checkbox.checked; // 反转多选框的选中状态
                });
                let selectAllItemBtn = document.querySelector("#selectAllItem");
                hasCheckedCheckbox()?selectAllItemBtn.textContent="反选":selectAllItemBtn.textContent="全选"


                // 如果点击移除选中按钮
            } else if (event.target.matches('#removeItem')) {

                // videoList.length=0
                  // 清空videoList数组


                // 保存清空后的状态到localStorage
                // localStorage.setItem('videoList', JSON.stringify(videoList));
                // liElList.length=0
                // saveLiElListToLocalStorage()
                // saveVideoList()
                // selectAllItemBtn.textContent="全选"

                // 移除所有选中状态的多选框对应的 <li> 元素
                const checkboxes = listContainer.querySelectorAll('input[type="checkbox"]:checked');
                const listItems = document.getElementById('myList').getElementsByTagName('li');
                const indicesToRemove = [];

                checkboxes.forEach(checkbox => {
                    const parentLi = checkbox.closest('li');
                    if (parentLi) {
                        // 获取被移除的 <li> 元素的索引
                        const index = Array.from(listItems).indexOf(parentLi);
                        indicesToRemove.push(index);
                    }
                });

                // 按索引从大到小排序,确保移除时索引不会变化
                indicesToRemove.sort((a, b) => b - a);

                for (let index of indicesToRemove) {
                    videoList.splice(index, 1);
                    // liElList.splice(index, 1); // 删除liElList中对应的元素
                     // 当删除播放列表面板列表项时需要更新playItemIndex,才能正确播放对应列表项
                    if (index < playItemIndex) {
                        playItemIndex--;
                    } else if (index === playItemIndex) {
                        // 如果当前播放的列表项被删除,则停止播放
                        playItemIndex=-1
                        stopVideo();
                    }
                }


                indicesToRemove.forEach(index => {
                    // console.log(`被移除的 <li> 元素的索引: ${index}`);
                    listItems[index].remove();



                });
                let count=0
                if(videoList.length>0){
                    count=videoList.length
                }
                count=count>0?'总计:'+count:'点击视频左边+号添加'
                let tip = document.querySelector('.text-tip')
                if(tip){
                    tip.textContent=count
                }
                localStorage.setItem('videoList', JSON.stringify(videoList));
                localStorage.setItem('playItemIndex', playItemIndex);
                // saveLiElListToLocalStorage()
                saveVideoListToLocalStorage(videoList)
                // updateVideoPlayList()
                // saveVideoList()
                let selectAllItemBtn = document.querySelector("#selectAllItem");
                hasCheckedCheckbox()?selectAllItemBtn.textContent="反选":selectAllItemBtn.textContent="全选"

                // 如果点击全部添加按钮
            }else if(event.target.matches('#addAllItem')){
                console.log('1347allVideoList长度:'+allVideoList.length)
                // let deleteAll = true
                let selectAllItemBtn = document.querySelector("#selectAllItem");
                selectAllItemBtn.textContent="全选"
                let videoEl = document.querySelector("div.bpx-player-video-wrap > video")
                videoEl.pause();
                videoEl.currentTime = 0;
                if(allVideoList.length>0){
                    // // 获取ul元素
                    let ulElement = document.getElementById('myList');

                    // 移除ul中的所有li元素
                    while (ulElement.firstChild) {
                        ulElement.removeChild(ulElement.firstChild);
                    }




                    // 清空数组
                    videoList.length = 0;
                    // 将allVideoList中的元素添加到videoList中
                    videoList.push(...allVideoList);

                    // for(let i=0;i<allVideoList.length;i++){
                    //     addItemToPLaylistPanel(allVideoList[i].title)
                    // }


                }
                saveVideoListToLocalStorage(videoList)
                // updateVideoPlayList()
                for(let i=0;i<videoPlayList.length;i++){
                    addItemToPLaylistPanel(videoPlayList[i].title)
                }
                // 如果点击切换style按钮
            }else if (event.target.matches('#toggleStyleBtn')) {
               console.log('1384切换style按钮被点击,allvideoList长度:'+allVideoList.length)
                toggleTheme()
                isDarkMode = !isDarkMode;

                // 如果点击了svg添加按钮
            }else if(event.target.matches('#addVideoBtn')){
                let videoItem = document.querySelector('div.clickitem') ||
                    document.querySelector('div.video-episode-card__info-title.video-episode-card__info-title_indent')||
                    document.querySelector('.video-episode-card__info-title');
                let listHead = document.querySelector("#multi_page > div.head-con") ||
                    document.querySelector(".video-sections-head_first-line");
                if(videoItem||listHead){
                    // dialog(message,x=false,y=false,second=false)
                    // x默认1150px,y默认100px,second默认3秒
                    console.log('调用 dialog 函数:', '仅用于添加非合集视频,请点击合集里面视频左边的+添加', 1000, 180, 4);
                    // dialog('仅用于添加非合集视频,请点击合集里面视频左边的+添加',1000,180,4)
                    dialog('仅用于添加非合集视频,请点击合集里面视频左边的+添加')
                    return
                }
                
                console.log('1613添加按钮被点击')
                let stitle = document.querySelector('.video-title.special-text-indent').getAttribute('data-title')
                let splayUrl = window.location.href
                console.log('stitle:',stitle)
                console.log('splayUrl:',splayUrl)
                if(stitle&&splayUrl.includes('/video/')){
                    // console.log('stitle:',stitle)
                    // console.log('splayUrl:',splayUrl)
                    videoList=JSON.parse(localStorage.getItem('videoList'))||[]
                    const svideoInfoInstance = new videoInfo('null', 'null', 'null', stitle, splayUrl);
                    // console.log('正在添加的stitle:', stitle);
                    // console.log('添加splayUrl:', splayUrl);
                    dialog(`已添加<<${stitle}>>到播放列表`)
                    videoList.push(svideoInfoInstance);
                    localStorage.setItem('videoList', JSON.stringify(videoList));
                    addItemToPLaylistPanel(stitle);
                }else{
                    console.log('添加失败')
                    dialog('视频信息加载中,请等稍后重试')
                }
                
                // if(videoList.length>0){
                //     count=videoList.length
                // }
                // count=count>0?count:'点击视频左边+号添加'
                // let tip = document.querySelector('.text-tip')
                // if(tip){
                //     tip.textContent=count
                // }


            }

        });

        // 将列表容器插入到 document.body 中
        document.body.appendChild(listContainer);

    }




///////////////////////////////////////
        function saveVideoListToLocalStorage(videoList) {
            const videoListData = videoList.map(videoInfo => {
                // if (!videoInfo.videoElementHtml || !videoInfo.liHtml) {
                //     console.error('videoInfo 缺少 videoElementHtml 或 liHtml:', videoInfo);
                //     return null;
                // }
                return {
                    
                    firstSpanText: videoInfo.firstSpanText,
                    secondSpanText: videoInfo.secondSpanText,
                    title: videoInfo.title,
                    playUrl: videoInfo.playUrl,
                };
            }).filter(item => item !== null); // 过滤掉缺少 videoElementHtml 或 liHtml 的项

            localStorage.setItem('videoList', JSON.stringify(videoListData));
        }

    /////////////////////////////
    function getVideoListFromLocalStorage() {
        const videoListData = JSON.parse(localStorage.getItem('videoList'));
        if (videoListData) {
            return videoListData.map(videoInfoData => {
                return new videoInfo(
                    videoInfoData.firstSpanText,
                    videoInfoData.secondSpanText,
                    videoInfoData.title,
                    videoInfoData.playUrl
                );
            });
        }
        return [];
    }

    /////////////////////////////






    // 为视频前面添加+号,点击后可以添加到播放列表
    function createAddBtnForVideoItem() {
        // class vedioInfo {
        //     constructor(firstSpanText, secondSpanText, title, playUrl) {
        //         
        //         this.firstSpanText = firstSpanText; // 视频序号,如:P1
        //         this.secondSpanText = secondSpanText; // 视频标题,如:你好吗
        //         this.title = title; // 名称如:P4 你好吗
        //         this.playUrl = playUrl; // 视频播放链接,如https://www.bilibili.com/video/BV1Ys4y1r7Dj/
        //     }
        // }
        // 分P视频ul
        const ul = document.querySelector('ul.list-box');
        // 其他合集ul
        const ulo = document.querySelector('.video-section-list.section-0');
        if (ul) {
            // 定义SVG图标按钮
            const svgIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" style="margin-right: 10px;" title="添加到播放列表"><path fill="#000000" d="M11 13H5v-2h6V5h2v6h6v2h-6v6h-2z"/></svg>`;
            
            let j = 0
            allVideoList=[]
            ul.querySelectorAll('li').forEach(li => {
                
                const spans = li.querySelectorAll('span');
                let firstSpanText = spans[0].textContent ? spans[0].textContent : 'P';
                let secondSpanText = spans[1].textContent ? spans[1].textContent : '未匹配标题';
                firstSpanText=firstSpanText.trim();
                secondSpanText=secondSpanText.trim();
                let videoTitle = firstSpanText + ' ' + secondSpanText;
                // let allVideoInfo = new vedioInfo(j, videoTitle, videoElement);
                let playUrl = li.querySelector('a').href;
                let mAllvideoInfo = new videoInfo(j,firstSpanText,secondSpanText, videoTitle, playUrl);
                // let mAllvedioInfo = new vedioInfo(index,firstSpanText,secondSpanText, videoTitle, playUrl);
                allVideoList.push(mAllvideoInfo);
                const img = li.querySelector('img');
                if (img) {
                    img.insertAdjacentHTML('beforebegin', svgIcon);
                    const newSvg = img.previousElementSibling;

                    newSvg.addEventListener('click', (event) => {
                        // liElList = getLiElListFromLocalStorage();
                        event.preventDefault();
                        event.stopPropagation();
                        dialog(`已添加<<${videoTitle}>>到播放列表`);

                        // liElList.push(li);
                        let mvideoInfo = new videoInfo(j,firstSpanText,secondSpanText,videoTitle, playUrl);
                        // let mvedioInfo = new vedioInfo(index,firstSpanText,secondSpanText,videoTitle, playUrl);
                        // console.log('正在添加的数量i:'+i)
                        console.log('正在添加的videoTitle:'+ videoTitle);
                        console.log('添加playUrl:'+playUrl);
                        // videoList=[]
                        videoList.push(mvideoInfo);
                        console.log('添加videoList长度:'+videoList.length);
                        
                        // saveVideoListToLocalStorage(videoList);
                        localStorage.setItem('videoList', JSON.stringify(videoList));
                        // updateVideoPlayList()
                        i++;

                        addItemToPLaylistPanel(videoTitle);
                       
                        // if(videoList.length>0){
                        //     count=videoList.length
                        // }
                        // count=count>0?count:'点击视频左边+号添加'
                        // let tip = document.querySelector('.text-tip')
                        // if(tip){
                        //     tip.textContent=count
                        // }

                    });
                }
                j++;
            });
        }else if(ulo){
            // let videoItem = document.querySelector('div.video-episode-card__info-title.video-episode-card__info-title_indent');
            // 定义SVG图标按钮
            let itemList=[]
            let videoEl = document.querySelector("div.bpx-player-video-wrap > video")
            // let playId1
            //     if(videoList.length>0){
            //         playId1 = localStorage.getItem('playId')||0;
            //     }else{
            //         playId1=0
            //     }
            // let playId1 = videoList.length > 0 ? localStorage.getItem('playId') || 0 : 0;
            videoEl.muted = true;//静音
            const svgIcon = `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" style="margin-right: 10px;" title="添加到播放列表"><path fill="#000000" d="M11 13H5v-2h6V5h2v6h6v2h-6v6h-2z"/></svg>`;
            let tempPlayIndex=-1;
            let videot=[]
            let videou=[]
            let videotu=[]
            let playitem
            
            let isLastItem = false
            let j = 0;
            let i = 0; // 定义 i 变量
            let allVideoList = [];
            let videoLists = []; // 定义 videoLists 变量
            let playUrl
            // let videoTitle
            // localStorage.setItem('playText', liTitle);
            let playText = localStorage.getItem('playText');
            // let playIndex = 0
            let playItem = null

            // let itemList=[]
            
            let playIndex = null
           // 定义一个异步函数来处理每个 item
            async function processItem(item, index) {
                let playId = index;
                itemList.push(item)

                
                // 使用闭包保存当前 item 的 videoTitle 和 playUrl
                const addSvgElement = (item, svgIcon) => {
                    const tempDiv = document.createElement('div');
                    tempDiv.innerHTML = svgIcon;
                    const svgElement = tempDiv.firstChild;
                    try {
                        item.insertAdjacentElement('beforebegin', svgElement);
                    } catch (error) {
                        console.error('Failed to insert element:', error);
                    }
                };

                const handleClick = (item, playId, videoTitle, playUrl) => {
                    event.preventDefault();
                    event.stopPropagation();
                    
                    // showTooltip(`已添加${videoTitle}到播放列表`);
                    dialog(`已添加<<${videoTitle}>>到播放列表`)
                    // 获取videoTitle在videot中的索引
                    // let index = videot.indexOf(videoTitle);
                    // if(playUrl!=videou[index]){
                    //     playUrl='https://www.bilibili.com'+initPlayUrlPath;
                    // }

                    const index1 = videot.indexOf(initTitle);
                    const index2 = videou.indexOf(initPlayUrlPath);
                    // tempPlayIndex = index1 >= 0 ? index1 : index2;
                    if(index2===-1&&index1!=-1){
                        playUrl='https://www.bilibili.com'+initPlayUrlPath;
                    }else if(index1===-1&&index2===-1){
                        let lastIndex = -1;
                        videou.forEach((item, index) => {
                            if (index < videou.length - 1 && item === videou[index + 1]) {
                              lastIndex = index + 1;
                            }
                          });
                        if(lastIndex>=0){
                            tempPlayIndex=lastIndex
                            playUrl='https://www.bilibili.com'+initPlayUrlPath;
                            videou[lastIndex]=initPlayUrlPath;
                        }
                    }



                    const videoInfoInstance = new videoInfo(playId, 'null', 'null', videoTitle, playUrl);
                    console.log('正在添加的videoTitle:', videoTitle);
                    console.log('添加playUrl:', playUrl);
                    videoList.push(videoInfoInstance);
                    localStorage.setItem('videoList', JSON.stringify(videoList));

                    i++;
                    addItemToPLaylistPanel(videoTitle);
                    
                   
                };

                
                
                addSvgElement(item, svgIcon);

                const newSvg = item.previousElementSibling;
                item.dispatchEvent(new MouseEvent('click', { bubbles: true }));
                const videoTitle = item.getAttribute('title').trim();
                // const playUrl = window.location.href.split('?')[0];
                playUrl = window.location.href;
                // let playUrlPath=playUrl.pathname;
                let playUrlPath=window.location.pathname
                const videoInfoInstance = new videoInfo(playId, videoTitle, videoTitle, videoTitle, playUrl);
                videotu[index]=[videoTitle,playUrlPath]
                videot[index]=videoTitle.trim()
                videou[index]=playUrlPath.trim()




                
                // console.log('1962 playUrl:', playUrl);
                // console.log('1965 tempPlayIndex:', tempPlayIndex);
                // console.log('1963 videoTitle:', videoTitle);
                // console.log('1964 innitTitle:', initTitle);
                // console.log('1965 initPlayUrlPath:', initPlayUrlPath);
                // console.log('1966 playUrl.pathname:', playUrlPath);
                
                allVideoList.push(videoInfoInstance);
                // if (playId1 === index) {
                //     playitem = item;
                // }

                
                newSvg.addEventListener('click', (event) => {
                    handleClick(item, playId, videoTitle, playUrl);
                });

                j++;

                // if(initTitle === videoTitle||initPlayUrlPath===playUrlPath){
                //     console.log('1995 找到临时播放索引:'+index)
                //     tempPlayIndex = index;
                    
                // }
                // 模拟异步操作,等待 1 秒
                await new Promise(resolve => setTimeout(resolve, 1000));

            }

            // 获取所有元素并依次处理
            const items = document.querySelectorAll('div.video-episode-card__info-title');
            

            // 依次处理每个 item
            items.forEach(async (item, index) => {
                await processItem(item, index);
            });

        // let playid = localStorage.getItem('playId')||0;
        // console.log('2036 playid:'+playid);
        console.log('2036 playItemIndex:'+playItemIndex);
        
        /*判断点击的视频是否为本地存储播放列表中的视频,若是则点击列表项播放,
        否则按当前点击的b站页面的视频播放*/
        let isListItem = false;
        
        if(playItemIndex!=-1){
            if(typeof videoList[playItemIndex] !== 'undefined'){
                videot.indexOf(videoList[playItemIndex].title)>=0?isListItem=true:isListItem=false;
            }else{
                isListItem=false
                console.log('2098 videoList[playItemIndex].title 未定义:')}
            
            console.log('2090 isListItem:'+isListItem);
            if(isListItem){
                setTimeout(() => {
                    videoEl.muted = false;//取消静音
                    clickLiEl(playItemIndex)
                }, 6000);
                setCurrentItemBackgroundAndPlayingGifVisible()
                scrollPlayItemIntoView()
           }else{
                playItemIndex=-1;
                
                setTimeout(() => {
                    const index1 = videot.indexOf(initTitle);
                    const index2 = videou.indexOf(initPlayUrlPath);
                    tempPlayIndex = index1 >= 0 ? index1 : index2;
                    if(index2===-1&&index1!=-1){
                        playUrl='https://www.bilibili.com'+initPlayUrlPath;
                    }else if(tempPlayIndex===-1){
                        let lastIndex = -1;
                        videou.forEach((item, index) => {
                            if (index < videou.length - 1 && item === videou[index + 1]) {
                              lastIndex = index + 1;
                            }
                          });
                        if(lastIndex>=0){
                            tempPlayIndex=lastIndex
                            playUrl='https://www.bilibili.com'+initPlayUrlPath;
                            videou[lastIndex]=initPlayUrlPath;
                        }
                    }
                    console.log('tempPlayIndex:'+tempPlayIndex);
                    console.log('playItemIndex:'+playItemIndex);
                    console.log('videot:'+videot)
                    console.log('videou:'+videou)
                    videoEl.muted = false;//取消静音
                    itemList[tempPlayIndex].click()
                }, itemList.length*600>=11000?11000:itemList.length*600);
                
                localStorage.setItem('playItemIndex', playItemIndex);
                
            }//else的括号
        }else{
            setTimeout(() => {
                videoEl.muted = false;//取消静音
                const index1 = videot.indexOf(initTitle);
                const index2 = videou.indexOf(initPlayUrlPath);
                tempPlayIndex = index1 >= 0 ? index1 : index2;
                if(index2===-1&&index1!=-1){
                    playUrl='https://www.bilibili.com'+initPlayUrlPath;
                }else if(tempPlayIndex===-1){
                    let lastIndex = -1;
                    videou.forEach((item, index) => {
                        if (index < videou.length - 1 && item === videou[index + 1]) {
                          lastIndex = index + 1;
                        }
                      });
                    if(lastIndex>=0){
                        tempPlayIndex=lastIndex
                        playUrl='https://www.bilibili.com'+initPlayUrlPath;
                        videou[lastIndex]=initPlayUrlPath;
                    }
                }
                console.log('2158 tempPlayIndex:'+tempPlayIndex);
                // console.log('2159 playItemIndex:'+playItemIndex);
                console.log('2160 videot:'+videot)
                console.log('2161 videou:'+videou)
                itemList[tempPlayIndex].click()
            },itemList.length*600>11000?11000:itemList.length*600)  
        }
      
        
     }//最近的else if(ulo)的括号


    }//function createAddBtnForVideoItem的括号
    /////////////////////////////////
    // Your code here...
})();