|
|
| 第6行: |
第6行: |
|
| |
|
| <div class="zhbus-led-screen"> | | <div class="zhbus-led-screen"> |
| <!-- 24行硬边缘点阵遮罩层(彻底消除半亮灯珠) --> | | <!-- 24行硬边缘点阵遮罩层 --> |
| <div class="zhbus-led-overlay"></div> | | <div class="zhbus-led-overlay"></div> |
| | | |
| 第121行: |
第121行: |
| </style> | | </style> |
|
| |
|
| <!-- 利用图片 onerror 绕过 MediaWiki 对 script 标签的剥离与过滤机制 -->
| |
| <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" style="display:none;" onerror="
| |
| (function() {
| |
| var API_URL = 'https://apiv2.zhbuswx.com/ContentPublish/GetAll?appType=notice&pageIndex=1&pageSize=20';
| |
| var FIXED_FIRST = '珠海巴士频道公交调整信息';
| |
| var SEP = '<span class="zhbus-sep">※</span>';
| |
|
| |
|
| var FALLBACK = [
| | <script src="https://zsbus.wiki/zhbus-led.js"></script> |
| '关于调整公交201路、K4路运行路线及停靠站点的公告',
| |
| '关于优化调整部分公交线路首尾班车时间的通告',
| |
| '关于针对雷雨恶劣天气实施公交应急保障预案的通知',
| |
| '关于乘车码刷码系统升级维护的温馨提示',
| |
| '关于开通高考专线及学生高考免费乘车政策的通告'
| |
| ];
| |
| | |
| function runLed() {
| |
| var track = document.getElementById('zhbusLedTrack');
| |
| var content = document.getElementById('zhbusLedContent');
| |
| var contentClone = document.getElementById('zhbusLedContentClone');
| |
| | |
| if (!track || !content || !contentClone || track.dataset.inited) return;
| |
| track.dataset.inited = 'true';
| |
| | |
| var controller = new AbortController();
| |
| var timer = setTimeout(function() { controller.abort(); }, 3000);
| |
| | |
| fetch(API_URL, { signal: controller.signal })
| |
| .then(function(res) {
| |
| clearTimeout(timer);
| |
| if (!res.ok) throw new Error();
| |
| return res.json();
| |
| })
| |
| .then(function(data) {
| |
| var items = data.data || data.Data || (data.data && data.data.list) || data;
| |
| var titles = [];
| |
| if (Array.isArray(items)) {
| |
| titles = items
| |
| .map(function(i) { return i.Title || i.title; })
| |
| .filter(Boolean)
| |
| .filter(function(t) { return t.indexOf('【已恢复】') === -1; });
| |
| }
| |
| if (!titles.length) throw new Error();
| |
| render(titles);
| |
| })
| |
| .catch(function() {
| |
| clearTimeout(timer);
| |
| var safeFallback = FALLBACK.filter(function(t) { return t.indexOf('【已恢复】') === -1; });
| |
| render(safeFallback);
| |
| });
| |
| | |
| function render(titles) {
| |
| var allTitles = [FIXED_FIRST].concat(titles);
| |
| var fullHtml = SEP + allTitles.join(SEP) + SEP;
| |
| | |
| content.innerHTML = fullHtml;
| |
| contentClone.innerHTML = fullHtml;
| |
| | |
| var tempDiv = document.createElement('div');
| |
| tempDiv.innerHTML = fullHtml;
| |
| var charCount = (tempDiv.textContent || tempDiv.innerText || '').length;
| |
| var duration = Math.max(charCount / 3, 2);
| |
| | |
| track.style.animation = 'zhbusMarquee ' + duration + 's linear infinite';
| |
| }
| |
| }
| |
| | |
| setTimeout(runLed, 50);
| |
| })();
| |
| " /> | |
| </html> | | </html> |