|
|

楼主 |
发表于 2024-10-22 12:22
|
显示全部楼层
本帖最后由 马黑黑 于 2024-10-22 12:24 编辑
帖子代码:
- <style>
- #msvg { display: block; margin: 30px 0 30px calc(50% - 593px); width: 1024px; height: 640px; box-shadow: 2px 2px 4px gray; z-index: 1; position: relative; }
- #g1 { fill: transparent; stroke: purple; stroke-width: 10; cursor: pointer; transform-box: fill-box; transform-origin:50% 50%; animation:rot 10s linear infinite var(--state); }
- #bg { transition: 1s; }
- @keyframes rot {to { transform: rotate(360deg); }}
- </style>
- <svg id="msvg" width="1024" height="640"></svg>
- <audio id="aud" src="https://music.163.com/song/media/outer/url?id=36668622" autoplay loop></audio>
- <script>
- new Promise((resolve) => {
- var sc = document.createElement('script');
- sc.src = 'https://638183.freep.cn/638183/web/js2024/svgdr_trial.js';
- document.body.appendChild(sc);
- sc.onload = () => resolve();
- }).then(() => {
- var dr = _dr(msvg);
- dr.image('https://638183.freep.cn/638183/t24/4/hope.jpg',0,0,1024,640);
- dr.image('https://638183.freep.cn/638183/web/svg/balls2.svg',0,0,1024,640).id('bg');
- dr.g('g1');
- dr.ellipse(490,310,100,40).addTo('g1');
- dr.ellipse(490,310,40,100).addTo('g1');
- }).then(() => {
- aud.onplaying = aud.onpause = () => mState();
- g1.onclick = () => aud.paused ? aud.play() : aud.pause();
- });
- mState = () => {
- g1.style.setProperty('--state', aud.paused ? 'paused' : 'running');
- bg.style.opacity = aud.paused ? 0 : 1;
- }
- </script>
复制代码 本帖测试 svg drawer 在论坛发帖的适应状况。由于论坛加载较多的资源,以 appendChild 方式加载插件后出现后续一些异步执行指令的问题,在获取特定绘制的svg元素时返回null(空),所以使用了 JS 的 Promise 一步一步执行帖子运行的子项:① 加载JS插件,完后, ② 声明画笔 dr 接着绘制图像,接着, ③ 这时可以获取到svg内的子元素了,就加入监听 audio 标签、监听 g1(svgdrawer 画的播放器)相关事件。
mState() 函数是公用函数,可以独立,不用放在 promise 模块里,然后在 Promise 的第三步中执行它。
|
评分
-
| 参与人数 2 | 威望 +80 |
金钱 +160 |
经验 +80 |
收起
理由
|
红影
| + 50 |
+ 100 |
+ 50 |
赞一个! |
花飞飞
| + 30 |
+ 60 |
+ 30 |
很给力! |
查看全部评分
|