花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 79|回复: 17

请教夕阳老师:如何控制这个动图、添加这个视频?[已解决]

[复制链接]
  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

    发表于 2024-12-1 12:54 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    本帖最后由 杨帆 于 2024-12-10 23:16 编辑










    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 13:05 | 显示全部楼层
    @夕阳黄昏  夕阳老师您好:

    在本地预览,除了动图控制不了,其余正常

    不知为何发到论坛就全部失效了

    请给于指导!由衷感谢~
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 13:07 | 显示全部楼层
    还有,歌词预览在左下,咋发在论坛就跑到了左上呢?
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2024-12-1 13:43 | 显示全部楼层
    杨帆 发表于 2024-12-1 13:05
    @夕阳黄昏  夕阳老师您好:

    在本地预览,除了动图控制不了,其余正常

    此帖正常显示需要三部分代码: CSS、HTML 以及 js
    而在此帖中没有 js 代码所以所有动态全部失效,CSS代码部分混入了多余的代码导致歌词跑到上面去了。

    我估计发帖时没把本地代码全部拷上故缺失了全部的js代码。

    另外,发帖步骤可能也存在问题。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 14:18 | 显示全部楼层
    夕阳黄昏 发表于 2024-12-1 13:43
    此帖正常显示需要三部分代码: CSS、HTML 以及 js
    而在此帖中没有 js 代码所以所有动态全部失效,CSS代 ...

    知道了,我再试试,谢谢夕阳老师
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 14:46 | 显示全部楼层
    还有一个问题请教:

    为何在本地测试,用之前的办法也不能控制动态图呢?

    该如何控制呢?谢谢夕阳老师@夕阳黄昏
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2024-12-1 16:27 | 显示全部楼层
    杨帆 发表于 2024-12-1 14:18
    知道了,我再试试,谢谢夕阳老师

    4#代码第二行 @import url(https://file.uhsea.com/2403/f45f ... 3eae6fa88eb78YS.css);
    应该是发帖时被破坏了,正确的是 @import rl(https://file.uhsea.com/2403/f45f79bba93cd62f8603eae6fa88eb78YS.css);
    改正后大部分功能会正常。
    这帖子的代码相对有些复杂,搞清楚各部分的作用还需要理顺它们之间的相互关系才能全部正常,这功夫大概和重新做一遍差不多。

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 17:12 | 显示全部楼层
    夕阳黄昏 发表于 2024-12-1 16:27
    4#代码第二行 @import url(https://file.uhsea.com/2403/f45f ... 3eae6fa88eb78YS.css);
    应该是发帖时 ...

    好的,知道了,谢谢老师
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2024-12-1 18:22 | 显示全部楼层
    没仔细琢磨,凑合着调整了一下
    1. <style>
    2. @import url(https://file.uhsea.com/2403/f45f79bba93cd62f8603eae6fa88eb78YS.css);
    3. :root {--rState:running;}
    4.         /**    不满意一般设置也可以调整下 **/
    5.         
    6. #papa {
    7.     position: relative;
    8.     width: 1400px;
    9.     height:750px;
    10.     background-color: #000000 ;
    11.     overflow:hidden;
    12.     margin: 130px 0 30px calc(50% - 780px);  
    13.     box-shadow: 4px 4px 10px #000;
    14.   }

    15. #testImg{position: absolute;width:80%;height: 90%;z-index: 4;mix-blend-mode:darken; }
    16.   
    17.   .lrcShow {
    18.      font:normal 3em 华文新魏;
    19.      font-weight:200;
    20.      color: #000080;
    21.      white-space: pre;
    22.      -webkit-background-clip: text;
    23.      z-index:10;
    24.      filter:drop-shadow(#FFFFFF 1px 0 0)drop-shadow(#FFFFFF 0 1px 0)drop-shadow(#FFFFFF -1px 0 0) drop-shadow(#FFFFFF 0 -1px  0);

    25.     }
    26.    .lrcShow::before { position: absolute;width: 20%;height: 100%;color: transparent;overflow: hidden;white-space: pre-webkit-background-clip: text;

    27.     }
    28.    
    29.     zxx-slide {
    30.     width: 100%;
    31.     height: 100%;
    32.     position: absolute;
    33.   }
    34.   .zxx-slide-a {
    35.     position: absolute;
    36.     cursor: default;
    37.     pointer-events:none;
    38.   }
    39.   .zxx-slide-a.in {
    40.     z-index: 1;
    41.     animation-duration: 2s;
    42.     animation-name: tilt-in-fwd-tr;
    43.     transition: 1s;
    44.   }
    45.   .zxx-slide-img {
    46.     width: 100%;
    47.     height: 100%;
    48.   }
    49. /**
    50. * ----------------------------------------
    51. * animation tilt-in-fwd-tr
    52. * ----------------------------------------
    53. */
    54. @keyframes tilt-in-fwd-tr {
    55.   0% {transform: rotateY(20deg) rotateX(35deg) translate(300px, -300px) skew(-35deg, 10deg);
    56.     opacity: 0;
    57.   }
    58.   100% {transform: rotateY(0) rotateX(0deg) translate(0, 0) skew(0deg, 0deg);
    59.     opacity: 1;
    60.   }
    61. }
    62. #processMeter{
    63.   position: absolute; right:1%; bottom:6%; width: 200px; height:100px; z-index:5;}
    64. #mPlayer{transform-origin:50%;cursor: pointer;animation: rot 5s linear infinite var(--rState);}
    65.   @keyframes rot {to {transform:rotate(1turn)}}

    66. #fullscreen { position: absolute; top:5%; left:83%;color:#ffffff; filter:drop-shadow( 1px 1px 1px #000000);font: normal 2.2em  华文新魏; opacity: 1; cursor: pointer; z-index: 1660}

    67. </style>
    68. <div id="papa">
    69.   <img id="testImg" src="https://xlaj.cn/upfile/202411/27/fn.gif" style="top:30px; left:200px;" />

    70.   <zxx-slide>
    71.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660941589f345e8d038131b5.jpg"> </a>
    72.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ed9f345e8d03a52abd.jpg"></a>
    73.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ed9f345e8d03a52e06.jpg"></a>
    74.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660946239f345e8d03a6afeb.jpg"></a>
    75.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ee9f345e8d03a535bb.jpg."></a>
    76.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ee9f345e8d03a531e6.jpg"></a>
    77.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660946229f345e8d03a6accb.jpg"></a>
    78.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/66095b059f345e8d03546b8e.jpg"></a>
    79.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ed9f345e8d03a52e06.jpg"></a>
    80.   </zxx-slide>
    81.     <div id="processMeter">
    82.         <svg stroke-width="5" viewBox="0 0 200 100" id="svgObj">
    83.             <path id='bgc' d="M 100 5 A 95 45 0 0 1 100 95 A 95 45 0 0 1 100 5" stroke="#ebeef5"  fill="none" ></path>
    84.             <path
    85.               class="process-circle"
    86.               d="M 100 5 A 95 45 0 0 1 100 95 A 95 45 0 0 1 100 5"
    87.               stroke="darkred"
    88.               fill="none"
    89.               stroke-dasharray="455"
    90.               stroke-dashoffset="455"
    91.             ></path>
    92.             <defs>
    93.                 <clipPath id="clip">
    94.                     <circle cx="100" cy="50" r="41" />
    95.                 </clilpPath>
    96.             </defs>
    97.             <image xlink:href="https://pic.imgdb.cn/item/6723214fd29ded1a8cfe28f1.png" id="mPlayer" width="95" height='95' x="50" y="0" clip-path="url(#clip)" preserveAspectRatio="none" />
    98.             <text x="85%" y="50%" stroke="lightgray" text-anchor="middle" dominant-baseline="middle" stroke-width="2" style="font-size:13px;" id="durTime"> </text>
    99.             <text x="15%" y="50%" stroke="lightgray" text-anchor="middle" dominant-baseline="middle" stroke-width="2" style="font-size:13px;" id="curTime"> </text>
    100.         </svg>   
    101.     </div>
    102. <div class="lrcShow" data-lrc="牧羊曲" >牧羊曲</div>

    103. <span id="fullscreen">全屏观赏</span>

    104. </div>
    105. <script>
    106.     const processCircle = document.querySelector('.process-circle');
    107.     // 获取圆的周长
    108.     const circumference = processCircle.getTotalLength();
    109.     // 把周长赋值给 strokeDasharray
    110.     processCircle.style.strokeDasharray = circumference;
    111.    
    112.     function setProcessCircle(percent = 0) {
    113.         // 动态计算 offset 赋值给 strokeDashoffset
    114.         // 为了支持 percent = 0 | '0%',所以使用 parseInt 转换
    115.         processCircle.style.strokeDashoffset =
    116.           circumference * (1 - parseInt(percent) / 100)
    117.     }   
    118. var sf0 = document.createElement('script');
    119. sf0.type = 'text/javascript';
    120. sf0.src = "https://file.uhsea.com/2410/739c572b5176f670f350463cf9ade957QB.js";
    121. sf0.charset = "utf-8";
    122. document.body.appendChild(sf0);

    123. sf0.onload = () => {
    124. let lrctxt = `
    125. [offset:0]
    126. [00:00.00]牧羊曲 - 郑绪岚
    127. [00:07.75]词:王立平
    128. [00:15.51]曲:王立平
    129. [00:23.27]日出嵩山坳
    130. [00:26.55]
    131. [00:29.82]晨钟惊飞鸟
    132. [00:32.73]
    133. [00:36.50]林间小溪水潺潺
    134. [00:42.56]
    135. [00:44.32]坡上青青草
    136. [00:47.69]
    137. [00:49.76]野果香山花俏
    138. [00:55.71]
    139. [00:59.75]狗儿跳羊儿跑
    140. [01:04.06]
    141. [01:06.43]举起鞭儿轻轻摇
    142. [01:12.43]
    143. [01:16.43]小曲满山飘满山飘
    144. [01:22.58]
    145. [01:49.97]莫道女儿娇
    146. [01:52.86]
    147. [01:56.75]无暇有奇巧
    148. [01:59.50]
    149. [02:03.39]冬去春来十六载
    150. [02:09.40]
    151. [02:11.29]黄花正年少
    152. [02:14.20]
    153. [02:16.63]腰身壮胆气豪
    154. [02:22.82]
    155. [02:26.68]常练武勤操劳
    156. [02:31.12]
    157. [02:33.39]耕田放牧打豺狼
    158. [02:39.37]
    159. [02:43.30]风雨一肩挑一肩挑
    160. [02:49.41]
    161. [02:51.63]风雨一肩挑一肩挑
    162. [02:57.72]
    163. [03:01.92]一肩挑
    164.     `;
    165.     let opts = {
    166.         lrcTxt: lrctxt,
    167.         audioURL: "https://file.uhsea.com/2411/084853c28b242814a04e290ed762dd8c1V.mp3",
    168.     }
    169.     let player = new lrcPlayerY(opts);
    170.        
    171.     let circlePoints = [];
    172.     let bgcLen = bgc.getTotalLength();

    173.     for (let i = 0; i < bgcLen; i++) {
    174.         circlePoints.push(bgc.getPointAtLength(i));
    175.     }
    176.     //console.log(circlePoints);

    177.     var eleZxxSlides = document.querySelectorAll('zxx-slide');
    178.         [].slice.call(eleZxxSlides).forEach(function(container) {
    179.         var timerSlide = null;
    180.         var indexSlide = 0;

    181.         // 对应的元素
    182.         var eleSlides = [].slice.call(container.querySelectorAll('a'));
    183.         var eleButtons = [].slice.call(container.querySelectorAll('button'));
    184.         var funSlide = function() {
    185.             eleSlides.forEach(function(slide, index) {
    186.                 if (!player.mObj.paused) {
    187.                     if (indexSlide == index) {
    188.                         slide.classList.add('in');
    189.                     } else if (slide.classList.contains('in')) {
    190.                         slide.classList.remove('in');
    191.                     }
    192.                 }
    193.             });
    194.             timerSlide = setTimeout(function() {
    195.                 indexSlide++;
    196.                 if (indexSlide == eleSlides.length) {
    197.                     indexSlide = 0;
    198.                 }
    199.                 funSlide();
    200.             },
    201.             12000);
    202.         }
    203.         indexSlide++;
    204.         setTimeout(funSlide, 12000);
    205.     });
    206.     let formatTime = (time) => {
    207.         let str = '';
    208.         let min = parseInt(time / 60);
    209.         let sec = parseInt(time % 60);
    210.         return ((min < 10 ? '0' + min: min) + ":" + (sec < 10 ? '0' + sec: sec));
    211.     };
    212.     player.mObj.addEventListener('timeupdate',    function() {
    213.         let processValue = player.mObj.currentTime / player.mObj.duration;
    214.         processCircle.style.strokeDashoffset = circumference * (1 - processValue);
    215.         durTime.textContent = formatTime(player.mObj.duration);
    216.         curTime.textContent = formatTime(player.mObj.currentTime);
    217.     });
    218.        
    219.     mPlayer.onclick = () => {
    220.         player.mObj.paused ? (mPlayer.style.setProperty('--rState', 'running'), player.mObj.play()) : (mPlayer.style.setProperty('--rState', 'paused'), player.mObj.pause());
    221.     }

    222.     let seeking = false;
    223.     let moveEventProc = (event) => {
    224.         if (!seeking) return;
    225.         let thePoint = 0,
    226.         minV = 100;
    227.         circlePoints.forEach((point, idx) => {
    228.             let mx = (point.x - event.offsetX),  my = (point.y - event.offsetY) ;
    229.                         let mv = mx * mx + my * my;
    230.             if (mv < minV) {
    231.                 minV = mv;
    232.                 thePoint = idx;
    233.             }
    234.         });
    235.                 let chkVal = thePoint / circumference;
    236.         let chkTime = player.mObj.duration * chkVal;
    237.         processCircle.style.strokeDashoffset = circumference * (1 - chkVal);
    238.         for (i = 0; i < player.lrcVec.length; i++) {
    239.             if (player.lrcVec.seconds >= chkTime) {
    240.                 //console.log(player.lrcVec.seconds, i);
    241.                 player.idx = i;
    242.                 player.mObj.currentTime = chkTime;
    243.                 break;
    244.             }
    245.         };
    246.     };
    247.     processCircle.addEventListener("mousemove", (event) => moveEventProc(event));
    248.     bgc.addEventListener("mousemove", (event) => moveEventProc(event));
    249.     processCircle.onclick = bgc.onclick = () => seeking = !seeking;


    250.         let fs = true;
    251.         fullscreen.onclick = () => {
    252.                 fs ? (fullscreen.innerText = '退出全屏', papa.requestFullscreen()) : (fullscreen.innerText = '全屏欣赏', document.exitFullscreen());
    253.                 fs = !fs;
    254.         };

    255.         var mState = () => {
    256.                 papa.style.setProperty('--state', ['running', 'paused'][ + player.mObj.paused]);
    257.                 player.mObj.paused ? image0.stop() : image0.play();
    258.         };
    259.         player.mObj.oncanplay = player.mObj.onplaying = player.mObj.onpause = () => mState();
    260.         mPlayer.onclick = () => player.mObj.paused ? player.mObj.play() : player.mObj.pause();
    261.         mPlayer.style.animationPlayState = player.mObj.paused ? 'paused': 'running';
    262.         player.mObj.addEventListener('playing', () => mPlayer.style.animationPlayState = 'running');
    263.         player.mObj.addEventListener('pause', () => mPlayer.style.animationPlayState = 'paused');

    264.         //        控制图片的代码
    265.         if ('getContext' in document.createElement('canvas')) {
    266.                 HTMLImageElement.prototype.play = function() {
    267.                         if (this.storeCanvas) {
    268.                                 // 移除存储的canvas
    269.                                 this.storeCanvas.parentElement.removeChild(this.storeCanvas);
    270.                                 this.storeCanvas = null;
    271.                                 // 透明度还原
    272.                                 this.style.opacity = '';
    273.                         }
    274.                         if (this.storeUrl) {
    275.                                 this.src = this.storeUrl;
    276.                         }
    277.                 };
    278.                 HTMLImageElement.prototype.stop = function() {
    279.                         var canvas = document.createElement('canvas');
    280.                         // 尺寸
    281.                         var width = this.width,
    282.                         height = this.height;
    283.                         if (width && height) {
    284.                                 // 存储之前的地址
    285.                                 if (!this.storeUrl) {
    286.                                         this.storeUrl = this.src;
    287.                                 }
    288.                                 // canvas大小
    289.                                 canvas.width = width;
    290.                                 canvas.height = height;
    291.                                 // 绘制图片帧(第一帧)
    292.                                 canvas.getContext('2d').drawImage(this, 0, 0, width, height);
    293.                                 // 重置当前图片
    294.                                 try {
    295.                                         this.src = canvas.toDataURL("image/gif");
    296.                                 } catch(e) {
    297.                                         // 跨域
    298.                                         this.removeAttribute('src');
    299.                                         // 载入canvas元素
    300.                                         canvas.style.position = 'absolute';
    301.                                         // 前面插入图片
    302.                                         this.parentElement.insertBefore(canvas, this);
    303.                                         // 隐藏原图
    304.                                         this.style.opacity = '0';
    305.                                         // 存储canvas
    306.                                         this.storeCanvas = canvas;
    307.                                 }
    308.                         }
    309.                 };
    310.         }
    311.         var image0 = document.getElementById("testImg");
    312. }
    313. </script>
    复制代码
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 18:25 | 显示全部楼层
    夕阳老师好,此帖是学习您的《北京的秋天》,不清楚加入gif动图后为何就控制不了呢?@夕阳黄昏
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 19:31 | 显示全部楼层
    夕阳黄昏 发表于 2024-12-1 18:22
    没仔细琢磨,凑合着调整了一下

    哇,夕阳老师您太强大了!折腾我几天的两只小鸟终于被搞定了!

    只知道代码调整好多,但不清楚是否具有普适性?

    无论如何,由衷感谢老师,因今晚我终于可以睡个好觉了@夕阳黄昏
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2025-12-14 15:03
  • 签到天数: 394 天

    [LV.9]以坛为家II

    304

    主题

    2682

    回帖

    1万

    积分

    版主

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生鹰傲苍穹飞龙在天王者至尊大将风范花潮版主

     楼主| 发表于 2024-12-1 21:14 | 显示全部楼层
    本帖最后由 杨帆 于 2024-12-10 23:24 编辑

    老师您好@夕阳黄昏   加了个视频,发现小播不能点击了呀,咋整呢?谢谢
    ★青春是一个人的精神生命,奋斗是一个人最大的体面,学习是一个人最美的姿态。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2024-12-2 06:29 | 显示全部楼层
    杨帆 发表于 2024-12-1 21:14
    老师您好@夕阳黄昏   加了个视频,发现小播不能点击了呀,代码见楼上,咋整呢?谢谢

    至少第二行又出老毛病了

    发帖的步骤:高级模式 --> 纯文本 --> 附件选项 --> HTML 代码 --> 禁用链接识别 --> 填写帖子名称 --> 粘贴帖子代码 --> 发表帖子

    按这个步骤来,正确的代码是不会出错的。

    点评

    知道了,谢谢老师悉心指导。 我查看源代码第二行完整,这个正色代码没完整显示第二行。  发表于 2024-12-2 11:58
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2024-12-2 08:30 | 显示全部楼层
    杨帆 发表于 2024-12-1 21:14
    老师您好@夕阳黄昏   加了个视频,发现小播不能点击了呀,代码见楼上,咋整呢?谢谢

    几个问题:
    1. 第二行 老毛病,有了昨天的经验一眼就看出来了;
    2. 84行 z-indx:1660, 这个也太大了,就是它的原因导致控制失灵(被遮挡住了);
    3. 飞鸟动态图片好像是私人所有,不希望别人使用,现在链接也失效了;
    4. 如果只是为了展示帖子,建议使用马黑现成的封装好的代码,功能全还不易出问题。

    点评

    1.感谢老师指出存在问题,明晰问题原因,并给出解决办法。<br> 2.飞鸟动态图片链接,又正常了。<br> 3.用马老师封装好的代码去展示确实便捷,但更乐意在老师指导下去探索、经历和体验这个过程。  发表于 2024-12-2 12:10
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2024-12-27 08:11
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    15

    主题

    412

    回帖

    3028

    积分

    论坛元老

    Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80Rank: 80

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪音画大师

    发表于 2024-12-2 08:31 | 显示全部楼层
    1. <style>
    2. @import url(https://file.uhsea.com/2403/f45f79bba93cd62f8603eae6fa88eb78YS.css);
    3. :root {--rState:running;}
    4.         /**    不满意一般设置也可以调整下 **/
    5.         
    6. #papa {
    7.     position: relative;
    8.     width: 1400px;
    9.     height:750px;
    10.     background-color: #000000 ;
    11.     overflow:hidden;
    12.     margin: 130px 0 30px calc(50% - 780px);  
    13.     box-shadow: 4px 4px 10px #000;
    14.   }

    15. #vid2 {
    16.     position: absolute;
    17.     left:0px;
    18.     bottom:0px;
    19.     width: 100%;
    20.     height:calc(100% + 100px);
    21.     mix-blend-mode:screen;
    22.     opacity: 0.8;   
    23.     object-fit: cover;
    24.     z-index:8;
    25. }

    26. #testImg{position: absolute;width:80%;height: 90%;z-index: 4;mix-blend-mode:darken; }
    27.   
    28.   .lrcShow {
    29.      font:normal 3em 华文新魏;
    30.      font-weight:200;
    31.      color: #000080;
    32.      white-space: pre;
    33.      cursor: none; ;pointer-events: none;
    34.      -webkit-background-clip: text;
    35.      z-index:10;
    36.      filter:drop-shadow(#FFFFFF 1px 0 0)drop-shadow(#FFFFFF 0 1px 0)drop-shadow(#FFFFFF -1px 0 0) drop-shadow(#FFFFFF 0 -1px  0);

    37.     }
    38.    .lrcShow::before { position: absolute;width: 20%;height: 100%;color: transparent;overflow: hidden;white-space: pre-webkit-background-clip: text;

    39.     }
    40.    
    41.     zxx-slide {
    42.     width: 100%;
    43.     height: 100%;
    44.     position: absolute;
    45.   }
    46.   .zxx-slide-a {
    47.     position: absolute;
    48.     cursor: default;
    49.     pointer-events:none;
    50.   }
    51.   .zxx-slide-a.in {
    52.     z-index: 1;
    53.     animation-duration: 2s;
    54.     animation-name: tilt-in-fwd-tr;
    55.     transition: 1s;
    56.   }
    57.   .zxx-slide-img {
    58.     width: 100%;
    59.     height: 100%;
    60.   }
    61. /**
    62. * ----------------------------------------
    63. * animation tilt-in-fwd-tr
    64. * ----------------------------------------
    65. */
    66. @keyframes tilt-in-fwd-tr {
    67.   0% {transform: rotateY(20deg) rotateX(35deg) translate(300px, -300px) skew(-35deg, 10deg);
    68.     opacity: 0;
    69.   }
    70.   100% {transform: rotateY(0) rotateX(0deg) translate(0, 0) skew(0deg, 0deg);
    71.     opacity: 1;
    72.   }
    73. }
    74. #processMeter{
    75.   position: absolute; right:1%; bottom:6%; width: 200px; height:100px; z-index:55;}

    76. #mCtrl{transform-origin:50%; cursor: pointer;pointer-events:auto;animation: rot 5s linear infinite var(--rState);}
    77.   @keyframes rot {to {transform:rotate(1turn)}}

    78. #fullscreen { position: absolute; top:5%; left:83%;color:#ffffff; filter:drop-shadow( 1px 1px 1px #000000);font: normal 2.2em  华文新魏; opacity: 1; cursor: pointer; z-index: 10}

    79. </style>
    80. <div id="papa">
    81.   <img id="testImg" src="https://xlaj.cn/upfile/202411/27/fn.gif" style="top:30px; left:200px;" />
    82. <video id="vid2" src="https://img.tukuppt.com/video_show/15653652/01/30/45/62bac706237f8.mp4" autoplay loop muted></video>

    83.   <zxx-slide>
    84.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660941589f345e8d038131b5.jpg"> </a>
    85.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ed9f345e8d03a52abd.jpg"></a>
    86.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ed9f345e8d03a52e06.jpg"></a>
    87.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660946239f345e8d03a6afeb.jpg"></a>
    88.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ee9f345e8d03a535bb.jpg."></a>
    89.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ee9f345e8d03a531e6.jpg"></a>
    90.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660946229f345e8d03a6accb.jpg"></a>
    91.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/66095b059f345e8d03546b8e.jpg"></a>
    92.     <a class="zxx-slide-a"><img class="zxx-slide-img" src="https://pic.imgdb.cn/item/660945ed9f345e8d03a52e06.jpg"></a>
    93.   </zxx-slide>
    94.     <div id="processMeter">
    95.         <svg stroke-width="5" viewBox="0 0 200 100" id="svgObj">
    96.             <path id='bgc' d="M 100 5 A 95 45 0 0 1 100 95 A 95 45 0 0 1 100 5" stroke="#ebeef5"  fill="none" ></path>
    97.             <path
    98.               class="process-circle"
    99.               d="M 100 5 A 95 45 0 0 1 100 95 A 95 45 0 0 1 100 5"
    100.               stroke="darkred"
    101.               fill="none"
    102.               stroke-dasharray="455"
    103.               stroke-dashoffset="455"
    104.             ></path>
    105.             <defs>
    106.                 <clipPath id="clip">
    107.                     <circle cx="100" cy="50" r="41" />
    108.                 </clilpPath>
    109.             </defs>
    110.             <image xlink:href="https://pic.imgdb.cn/item/6723214fd29ded1a8cfe28f1.png" id="mCtrl" width="95" height='95' x="50" y="0" clip-path="url(#clip)" preserveAspectRatio="none" />
    111.             <text x="85%" y="50%" stroke="lightgray" text-anchor="middle" dominant-baseline="middle" stroke-width="2" style="font-size:13px;" id="durTime"> </text>
    112.             <text x="15%" y="50%" stroke="lightgray" text-anchor="middle" dominant-baseline="middle" stroke-width="2" style="font-size:13px;" id="curTime"> </text>
    113.         </svg>   
    114.     </div>
    115. <div class="lrcShow" data-lrc="牧羊曲" >牧羊曲</div>

    116. <span id="fullscreen">全屏观赏</span>

    117. </div>
    118. <script>
    119.     const processCircle = document.querySelector('.process-circle');
    120.     // 获取圆的周长
    121.     const circumference = processCircle.getTotalLength();
    122.     // 把周长赋值给 strokeDasharray
    123.     processCircle.style.strokeDasharray = circumference;
    124.    
    125.     function setProcessCircle(percent = 0) {
    126.         // 动态计算 offset 赋值给 strokeDashoffset
    127.         // 为了支持 percent = 0 | '0%',所以使用 parseInt 转换
    128.         processCircle.style.strokeDashoffset =
    129.           circumference * (1 - parseInt(percent) / 100)
    130.     }   
    131. var sf0 = document.createElement('script');
    132. sf0.type = 'text/javascript';
    133. sf0.src = "https://file.uhsea.com/2410/739c572b5176f670f350463cf9ade957QB.js";
    134. sf0.charset = "utf-8";
    135. document.body.appendChild(sf0);

    136. sf0.onload = () => {
    137. let lrctxt = `
    138. [offset:0]
    139. [00:00.00]牧羊曲 - 郑绪岚
    140. [00:07.75]词:王立平
    141. [00:15.51]曲:王立平
    142. [00:23.27]日出嵩山坳
    143. [00:26.55]
    144. [00:29.82]晨钟惊飞鸟
    145. [00:32.73]
    146. [00:36.50]林间小溪水潺潺
    147. [00:42.56]
    148. [00:44.32]坡上青青草
    149. [00:47.69]
    150. [00:49.76]野果香山花俏
    151. [00:55.71]
    152. [00:59.75]狗儿跳羊儿跑
    153. [01:04.06]
    154. [01:06.43]举起鞭儿轻轻摇
    155. [01:12.43]
    156. [01:16.43]小曲满山飘满山飘
    157. [01:22.58]
    158. [01:49.97]莫道女儿娇
    159. [01:52.86]
    160. [01:56.75]无暇有奇巧
    161. [01:59.50]
    162. [02:03.39]冬去春来十六载
    163. [02:09.40]
    164. [02:11.29]黄花正年少
    165. [02:14.20]
    166. [02:16.63]腰身壮胆气豪
    167. [02:22.82]
    168. [02:26.68]常练武勤操劳
    169. [02:31.12]
    170. [02:33.39]耕田放牧打豺狼
    171. [02:39.37]
    172. [02:43.30]风雨一肩挑一肩挑
    173. [02:49.41]
    174. [02:51.63]风雨一肩挑一肩挑
    175. [02:57.72]
    176. [03:01.92]一肩挑
    177.     `;
    178.     let opts = {
    179.         lrcTxt: lrctxt,
    180.         audioURL: "https://file.uhsea.com/2411/084853c28b242814a04e290ed762dd8c1V.mp3",
    181.     }
    182.     let player = new lrcPlayerY(opts);
    183.         
    184.     let circlePoints = [];
    185.     let bgcLen = bgc.getTotalLength();

    186.     for (let i = 0; i < bgcLen; i++) {
    187.         circlePoints.push(bgc.getPointAtLength(i));
    188.     }
    189.     //console.log(circlePoints);

    190.     var eleZxxSlides = document.querySelectorAll('zxx-slide');
    191.         [].slice.call(eleZxxSlides).forEach(function(container) {
    192.         var timerSlide = null;
    193.         var indexSlide = 0;

    194.         // 对应的元素
    195.         var eleSlides = [].slice.call(container.querySelectorAll('a'));
    196.         var eleButtons = [].slice.call(container.querySelectorAll('button'));
    197.         var funSlide = function() {
    198.             eleSlides.forEach(function(slide, index) {
    199.                 if (!player.mObj.paused) {
    200.                     if (indexSlide == index) {
    201.                         slide.classList.add('in');
    202.                     } else if (slide.classList.contains('in')) {
    203.                         slide.classList.remove('in');
    204.                     }
    205.                 }
    206.             });
    207.             timerSlide = setTimeout(function() {
    208.                 indexSlide++;
    209.                 if (indexSlide == eleSlides.length) {
    210.                     indexSlide = 0;
    211.                 }
    212.                 funSlide();
    213.             },
    214.             12000);
    215.         }
    216.         indexSlide++;
    217.         setTimeout(funSlide, 12000);
    218.     });
    219.     let formatTime = (time) => {
    220.         let str = '';
    221.         let min = parseInt(time / 60);
    222.         let sec = parseInt(time % 60);
    223.         return ((min < 10 ? '0' + min: min) + ":" + (sec < 10 ? '0' + sec: sec));
    224.     };
    225.     player.mObj.addEventListener('timeupdate',    function() {
    226.         let processValue = player.mObj.currentTime / player.mObj.duration;
    227.         processCircle.style.strokeDashoffset = circumference * (1 - processValue);
    228.         durTime.textContent = formatTime(player.mObj.duration);
    229.         curTime.textContent = formatTime(player.mObj.currentTime);
    230.     });
    231.       
    232.     mCtrl.addEventListener('click', () => {
    233.         console.log('mCtrl cliecked !');
    234.         player.mObj.paused ? (mCtrl.style.setProperty('--rState', 'running'), player.mObj.play()) : (mCtrl.style.setProperty('--rState', 'paused'), player.mObj.pause());
    235.     });
    236.         var mState = () => {
    237.                 papa.style.setProperty('--state', ['running', 'paused'][ + player.mObj.paused]);
    238.                 player.mObj.paused ?  (vid2.pause(), image0.stop()) : (vid2.play(), image0.play());
    239.                 };

    240.         //player.mObj.oncanplay = player.mObj.onplaying = player.mObj.onpause = () => mState();
    241.         //mCtrl.onclick = () => player.mObj.paused ? player.mObj.play() : player.mObj.pause();
    242.         //mCtrl.style.animationPlayState = player.mObj.paused ? 'paused' : 'running';
    243.         player.mObj.addEventListener('play', () => mState());
    244.         player.mObj.addEventListener('pause', () => mState());
    245. /**
    246.     let seeking = false;
    247.     let moveEventProc = (event) => {
    248.         if (!seeking) return;
    249.         let thePoint = 0,
    250.         minV = 100;
    251.         circlePoints.forEach((point, idx) => {
    252.             let mx = (point.x - event.offsetX),  my = (point.y - event.offsetY) ;
    253.                         let mv = mx * mx + my * my;
    254.             if (mv < minV) {
    255.                 minV = mv;
    256.                 thePoint = idx;
    257.             }
    258.         });
    259.                 let chkVal = thePoint / circumference;
    260.         let chkTime = player.mObj.duration * chkVal;
    261.         processCircle.style.strokeDashoffset = circumference * (1 - chkVal);
    262.         for (i = 0; i < player.lrcVec.length; i++) {
    263.             if (player.lrcVec.seconds >= chkTime) {
    264.                 //console.log(player.lrcVec.seconds, i);
    265.                 player.idx = i;
    266.                 player.mObj.currentTime = chkTime;
    267.                 break;
    268.             }
    269.         };
    270.     };
    271.     processCircle.addEventListener("mousemove", (event) => moveEventProc(event));
    272.     bgc.addEventListener("mousemove", (event) => moveEventProc(event));
    273.     processCircle.onclick = bgc.onclick = () => seeking = !seeking;
    274. **/

    275.         let fs = true;
    276.         fullscreen.onclick = () => {
    277.                 fs ? (fullscreen.innerText = '退出全屏', papa.requestFullscreen()) : (fullscreen.innerText = '全屏欣赏', document.exitFullscreen());
    278.                 fs = !fs;
    279.         };


    280.         //        控制图片的代码
    281.         if ('getContext' in document.createElement('canvas')) {
    282.                 HTMLImageElement.prototype.play = function() {
    283.                         if (this.storeCanvas) {
    284.                                 // 移除存储的canvas
    285.                                 this.storeCanvas.parentElement.removeChild(this.storeCanvas);
    286.                                 this.storeCanvas = null;
    287.                                 // 透明度还原
    288.                                 this.style.opacity = '';
    289.                         }
    290.                         if (this.storeUrl) {
    291.                                 this.src = this.storeUrl;
    292.                         }
    293.                 };
    294.                 HTMLImageElement.prototype.stop = function() {
    295.                         var canvas = document.createElement('canvas');
    296.                         // 尺寸
    297.                         var width = this.width,
    298.                         height = this.height;
    299.                         if (width && height) {
    300.                                 // 存储之前的地址
    301.                                 if (!this.storeUrl) {
    302.                                         this.storeUrl = this.src;
    303.                                 }
    304.                                 // canvas大小
    305.                                 canvas.width = width;
    306.                                 canvas.height = height;
    307.                                 // 绘制图片帧(第一帧)
    308.                                 canvas.getContext('2d').drawImage(this, 0, 0, width, height);
    309.                                 // 重置当前图片
    310.                                 try {
    311.                                         this.src = canvas.toDataURL("image/gif");
    312.                                 } catch(e) {
    313.                                         // 跨域
    314.                                         this.removeAttribute('src');
    315.                                         // 载入canvas元素
    316.                                         canvas.style.position = 'absolute';
    317.                                         // 前面插入图片
    318.                                         this.parentElement.insertBefore(canvas, this);
    319.                                         // 隐藏原图
    320.                                         this.style.opacity = '0';
    321.                                         // 存储canvas
    322.                                         this.storeCanvas = canvas;
    323.                                 }
    324.                         }
    325.                 };
    326.         }
    327.         var image0 = document.getElementById("testImg");
    328. }
    329. </script>
    复制代码

    点评

    老师,您辛苦了!由衷感谢老师的悉心指导、耐心示范、全心引领,感恩老师~  发表于 2024-12-2 12:15
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-12-14 20:04 , Processed in 0.088326 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表