You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

409 lines
15 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.1, maximum-scale=5.0, user-scalable=yes">
<title>e-plus 模拟器</title>
<style>
html, body {
font-family: 'Arial', sans-serif;
margin: 0;
padding: 0;
background-color: #f9f9f9;
color: #333;
height: 100%;
overflow: hidden;
}
h2 {
margin-bottom: 5px;
}
h4 {
margin-top: 0;
color: #666;
}
.container {
display: flex;
min-height: 100vh;
}
.control {
background-color: #fff;
padding: 20px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
flex: 1;
min-width: 300px;
overflow-y: auto;
height: 100vh;
}
.template {
background-color: #f9f9f9;
padding: 20px;
display: flex;
flex: 2;
}
.control-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
input[type="text"],
select {
width: 100%;
padding: 6px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
height: 36px;
}
#template-container {
width: 600px;
margin: auto;
transition: width 0.1s ease;
}
.c-text,
.c-text-link {
white-space: pre-wrap
}
.selector {
display: flex;
gap: 16px;
margin-bottom: 4px;
}
.radio {
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
margin-bottom: 0;
}
#tip {
color: #888;
text-align: center;
}
a {
color: #333;
}
@media (max-width: 768px) {
html, body {
overflow: auto;
}
.container {
flex-direction: column;
}
.control,
.template {
flex: none;
width: 100%;
}
.control {
height: 100vh;
overflow-y: auto;
padding-bottom: 100vh;
}
.template {
order: -1;
}
#template-container {
width: 100%;
}
}
</style>
<link type="text/css" rel="stylesheet" href="./base.css" title="emps">
</head>
<body>
<div class="container">
<div class="control">
<h2>e-plus 模拟器</h2>
<h4 id="author">v0.4 by wlt233</h4>
<div class="control-group">
<label for="title">标题</label>
<input type="text" id="title" value="ラブライブ!サンシャイン!! Aqours Finale LoveLive! ~永久stage~">
</div>
<div class="control-group">
<label for="datetime">时间</label>
<input type="text" id="datetime" value="2025/06/22(日) 15:00開場 17:00開演">
</div>
<div class="control-group">
<label for="message">注释</label>
<input type="text" id="message" value="※当選した公演日時を表示しています">
</div>
<div class="control-group">
<label for="place">场地</label>
<input type="text" id="place" value="ベルーナドーム(埼玉県)">
<select id="place-list"></select>
</div>
<div class="control-group">
<label for="reception">抽选</label>
<div class="selector u-mt8">
<label class="radio">
<input type="radio" name="reception" value="lottery" checked> 抽選
</label>
<label class="radio">
<input type="radio" name="reception" value="first"> 先着
</label>
</div>
<input type="text" id="reception" value="<Day.2>最速先行抽選">
</div>
<div class="control-group">
<label for="status">结果</label>
<div class="selector u-mt8">
<label class="radio">
<input type="radio" name="status" value="win" checked> 当選
</label>
<label class="radio">
<input type="radio" name="status" value="lose"> 落選
</label>
<label class="radio">
<input type="radio" name="status" value="wait"> 抽選前
</label>
<label class="radio">
<input type="radio" name="status" value="online"> 視聴
</label>
</div>
<div style="display: flex;">
<input type="text" id="status-msg-head" value="当選" style="width: 15%; display: flex">
<input type="text" id="status-msg-body" value="詳細をご確認ください" style="width: 85%; display: flex">
</div>
<select id="status-list"></select>
</div>
<div class="control-group">
<label>页面宽度</label>
<input type="range" id="width" min="300" max="1000" value="600" style="width: 100%;">
</div>
<div>免责声明:此网页仅供娱乐,请勿当真!请勿使用网页伪造任何证明!用户操作导致的任何风险和结果由用户自己承担!</div>
<div><br>友情链接: <a href="https://tqlwsl.moe/loveca">Loveca抽卡模拟器</a></div>
</div>
<div class="template">
<div id="template-container" style="position:relative;overflow:hidden">
<!--虽然很脱裤子放屁,但能看到这里我觉得你也会按 f12 了,请为自己的行为负责-->
<div style="position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-45deg);color:rgba(0,0,0,0.1);font-size:48px;white-space:nowrap;z-index:1" id="watermark">仅供娱乐,请勿当真</div>
<div class="m-ms01-select">
<div class="m-ms01-select__item">
<label class="c-radio c-radio--btn">
<input class="c-radio__input" type="radio" readonly="" value="all" name="option" checked="">
<span class="c-radio__body">
<span class="c-radio__icon"></span>
<span class="c-radio__label" id="msO1-filter-all">すべて</span>
</span>
</label>
</div>
<div class="m-ms01-select__item">
<label class="c-radio c-radio--btn">
<input class="c-radio__input" type="radio" readonly="" value="unpaid_or_unissue" name="option">
<span class="c-radio__body">
<span class="c-radio__icon"></span>
<span class="c-radio__label" id="msO1-filter-unpaid_or_unissue">未入金・未発券</span>
</span>
</label>
</div>
</div>
<div class="m-ms01-aplItem m-ms01-aplItem-" data-id="">
<div class="m-ms01-aplItem__inner">
<div class="m-ms01-aplItem__top">
<a class="c-text-link c-text--type4 u-text--medium"
data-id="ms01-order_list--tour_name" id="ms01-order_list--tour_name" data-wovn-ignore="true"
href="">ラブライブ!サンシャイン!! Aqours Finale LoveLive! ~永久stage~</a>
<p class="c-text c-text--type3 u-text--medium u-mt8" data-id="ms01-order_list--event_datetime"
id="ms01-order_list--event_datetime">2025/06/22(日) 15:00開場 17:00開演</p>
<p class="c-text c-text--type1" id="ms01-order_list--hope_num_message">※当選した公演日時を表示しています</p>
<p class="c-text c-text--type3 u-text--medium m-ms01-aplItem__place u-mt8"
id="ms01-order_list--venue_name">ベルーナドーム(埼玉県)</p>
<p class="c-text c-text--type3 u-text--medium u-mt8" id="ms01-order_list--order_datetime"></p>
</div>
<div class="m-ms01-aplItem__reception u-mt8"><span
id="ms01-order_list--first_arrival_lottery_image_division" class="c-label ">抽選</span>
<p class="c-text c-text--type3 u-text--medium" id="ms01-order_list--reception_name">&lt;Day.2&gt;最速先行抽選</p>
</div>
<div class="c-status c-status-win u-mt8" id="ms01-order_list--status_color">
<div class="c-status__head" id="ms01-order_list--election_status_message">当選</div>
<div class="c-status__body" id="ms01-order_list--status_body">
<div id="ms01-order_list--status_message">詳細をご確認ください</div>
</div>
</div>
<a class="c-btn u-mt16" id="ms01-order_list--detail_button" href=""><span>詳細</span></a>
<!--<div><p id="tip">仅供娱乐,请勿当真</p></div>-->
</div>
</div>
</div>
</div>
</div>
<script>
function updateContent(inputId, targetSelector) {
document.getElementById(inputId).addEventListener("input", function () {
document.querySelector(targetSelector).textContent = this.value;
});
}
updateContent("title", "#ms01-order_list--tour_name");
updateContent("datetime", "#ms01-order_list--event_datetime");
updateContent("message", "#ms01-order_list--hope_num_message");
updateContent("place", "#ms01-order_list--venue_name");
updateContent("reception", "#ms01-order_list--reception_name");
updateContent("status-msg-head", "#ms01-order_list--election_status_message");
updateContent("status-msg-body", "#ms01-order_list--status_message");
const originWidth = window.innerWidth;
document.getElementById('width').max = parseInt(originWidth * 1.5);
document.getElementById("width").addEventListener("input", function () {
const width = this.value;
document.querySelector("html").style.width = (parseInt(width) + 40) + "px";
document.getElementById("template-container").style.width = width + "px";
});
document.querySelectorAll('input[name="reception"]').forEach(function (radio) {
radio.addEventListener("change", function () {
switch (this.value) {
case "first":
document.getElementById("ms01-order_list--first_arrival_lottery_image_division").textContent = "先着";
document.getElementById("reception").value = "<Day.2>一般発売";
document.getElementById("ms01-order_list--reception_name").textContent = "<Day.2>一般発売";
break;
default:
document.getElementById("ms01-order_list--first_arrival_lottery_image_division").textContent = "抽選";
document.getElementById("reception").value = "<Day.2>最速先行抽選";
document.getElementById("ms01-order_list--reception_name").textContent = "<Day.2>最速先行抽選";
}
});
});
document.querySelectorAll('input[name="status"]').forEach(function (radio) {
radio.addEventListener("change", function () {
const statusDiv = document.getElementById("ms01-order_list--status_color");
statusDiv.classList.remove("c-status-win");
statusDiv.classList.remove("c-status-wait");
if (statusDiv.children.length == 1) {
statusDiv.innerHTML = `<div class="c-status__head" id="ms01-order_list--election_status_message">当選</div><div class="c-status__body" id="ms01-order_list--status_body"><div id="ms01-order_list--status_message">詳細をご確認ください</div></div>`;
}
switch (this.value) {
case "win":
statusDiv.classList.add("c-status-win");
break;
case "wait":
statusDiv.classList.add("c-status-wait");
break;
case "online":
if (statusDiv.children.length == 2) statusDiv.children[0].remove();
statusDiv.classList.add("c-status-win");
break
default:
break;
}
});
});
const statusList = `
当選 詳細をご確認ください
当選 ダウンロード開始日:2025/06/20 15:00
当選 チケットはダウンロ一ド済みです。ダウンロ一ド日:2025/06/20
当選 支払期限切れ
落選 チケットをご用意できませんでした
無効 申込み:取消しました
抽選前 抽選結果発表:2025/06/19 13:002025/06/20 18:00
視聴詳細ページ:チケットが表示できます
`.trim().split("\n").map(status => `<option value="${status}">${status}</option>`).join("");
document.getElementById("status-list").innerHTML = statusList;
document.getElementById("status-list").value = "当選 詳細をご確認ください";
document.getElementById("status-list").addEventListener("change", function () {
const [head, body] = this.value.split(" ", 2);
document.getElementById("status-msg-head").value = head;
document.getElementById("status-msg-body").value = body;
document.getElementById("status-msg-body").dispatchEvent(new Event('input'));
document.getElementById("status-msg-head").dispatchEvent(new Event('input'));
});
const placeList = `
-
東京ドーム(東京都)
Kアリーナ横浜神奈川県
ベルーナドーム(埼玉県)
国家会展中心上海虹館EH海外
国立代々木競技場 第一体育館(東京都)
日本武道館(東京都)
有明アリーナ(東京都)
両国国技館(東京都)
武蔵野の森総合スポーツプラザ(東京都)
京王アリーナTOKYO・メインアリーナ東京都
Zepp DiverCity (TOKYO)(東京都)
ダイバーシティ東京 プラザ 2Fフェスティバル広場東京都
東京ビッグサイト 東1ホール東京都
ぴあアリーナMM神奈川県
横浜アリーナ(神奈川県)
パシフィコ横浜 国立大ホール(神奈川県)
横浜BLITZ神奈川県
さいたまスーパーアリーナ(埼玉県)
幕張メッセ 国際展示場(千葉県)
幕張メッセ 幕張イベントホール(千葉県)
名古屋国際会議場 センチュリーホール(愛知県)
AICHI SKY EXPO ホールA愛知県
Niterra日本特殊陶業市民会館フォレストホール愛知県
石川県産業展示館 (4号館)(石川県)
キラメッセぬまづ(静岡県)
沼津市民文化センター 大ホール(静岡県)
京セラドーム大阪(大阪府)
大阪城ホール(大阪府)
オリックス劇場(大阪府)
札幌市民ホール(北海道)
仙台サンプラザホール(宮城県)
福岡市民ホール 大ホール(福岡県)
万代南夢宮上海文化センター 夢想劇場(海外)
万代南夢宮上海文化センター 未来劇場(海外)
上海メルセデス・ベンツ文化センター(海外)
静安体育センター・体育館(海外)
広州亜運城総合体育館(海外)
`.trim().split("\n").map(place => `<option value="${place}">${place}</option>`).join("");
document.getElementById("place-list").innerHTML = placeList;
document.getElementById("place-list").value = "-";
document.getElementById("place-list").addEventListener("change", function () {
document.getElementById("place").value = this.value;
document.getElementById("place").dispatchEvent(new Event('input'));
});
// 虽然很脱裤子放屁,但能看到这里我觉得你也会按 f12 了,请为自己的行为负责
let clickCount = 0;
let lastClickTime = 0;
document.getElementById("author").addEventListener("click", function() {
const now = Date.now();
if (now - lastClickTime > 500) clickCount = 0;
clickCount++;
lastClickTime = now;
if (clickCount === 5) document.getElementById("watermark").remove();
});
</script>
</body>
</html>