Animation1.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784
  1. <template>
  2. <div style='background:#ffffff'>
  3. <el-row>
  4. <el-col :span="1">&nbsp;</el-col>
  5. <el-col :span="22">
  6. <span class="musicTitle">生物反馈</span>
  7. <el-divider></el-divider>
  8. </el-col>
  9. <el-col :span="1">&nbsp;</el-col>
  10. </el-row>
  11. <el-row>
  12. <el-col :span="1"> &nbsp; </el-col>
  13. <el-col :span="22">
  14. <span class="desSty"> 游戏场景</span>
  15. <el-select
  16. class="selectSty"
  17. size="mini"
  18. v-model="gameScene"
  19. placeholder="请选择"
  20. @change="changeGame"
  21. >
  22. <el-option
  23. v-for="item in optionsGame"
  24. :key="item.value"
  25. :label="item.label"
  26. :value="item.value"
  27. >
  28. </el-option>
  29. </el-select>
  30. &nbsp;&nbsp;
  31. <span class="desSty">选择设备</span>
  32. <el-select
  33. v-model="equipment"
  34. placeholder="请选择"
  35. class="selectSty"
  36. size="mini"
  37. @change="equipmentFun"
  38. >
  39. <el-option
  40. v-for="item in optionsEquipment"
  41. :key="item.value"
  42. :label="item.label"
  43. :value="item.value"
  44. >
  45. </el-option>
  46. </el-select>
  47. &nbsp;&nbsp;
  48. <span class="desSty">游戏难度</span>
  49. <el-select
  50. v-model="gameDifficulty"
  51. placeholder="请选择"
  52. class="selectSty"
  53. size="mini"
  54. @change="gameDiffFun"
  55. >
  56. <el-option
  57. v-for="item in difficultyOptions"
  58. :key="item.value"
  59. :label="item.label"
  60. :value="item.value"
  61. >
  62. </el-option>
  63. </el-select>
  64. &nbsp;&nbsp;
  65. <span class="desSty">游戏时间</span>
  66. <el-select
  67. v-model="gameTime"
  68. placeholder="请选择"
  69. class="selectSty"
  70. size="mini"
  71. @change="gameTimeFun"
  72. >
  73. <el-option
  74. v-for="item in timeOptions"
  75. :key="item.value"
  76. :label="item.label"
  77. :value="item.value"
  78. >
  79. </el-option>
  80. </el-select>
  81. <span
  82. style="font-size: 12px"
  83. v-show="equipment == '2' && pulseTimeNum < 180 && pulseTimeNum > 0"
  84. >还剩{{ timeShow }}开始</span
  85. >
  86. <span
  87. style="font-size: 12px"
  88. v-show="buttonFlag == '结束' && gameTimeTimerFlag"
  89. >{{ timeShow }}</span
  90. >
  91. <el-button
  92. @click="startTest"
  93. size="mini"
  94. class="xl_d_button"
  95. style="float: right; font-size: 12px"
  96. >{{ buttonFlag }}</el-button
  97. >
  98. <el-row>
  99. <!-- <el-col :span="4" style="text-align: left">
  100. 游戏场景
  101. <el-select
  102. v-model="value"
  103. placeholder="选择游戏场景"
  104. @change="changeGame"
  105. >
  106. <el-option
  107. v-for="item in options"
  108. :key="item.value"
  109. :label="item.label"
  110. :value="item.value"
  111. >
  112. </el-option>
  113. </el-select>
  114. </el-col> -->
  115. <!-- <el-col :span="12">
  116. <span>请选择反馈指标</span>&nbsp;&nbsp;&nbsp;&nbsp;
  117. <el-select v-model="valueAttention" placeholder="请选择">
  118. <el-option
  119. v-for="item in optionsAttention"
  120. :key="item.value"
  121. :label="item.label"
  122. :value="item.value"
  123. >
  124. </el-option>
  125. </el-select>
  126. </el-col> -->
  127. </el-row>
  128. <el-row> </el-row>
  129. <el-row>
  130. <el-col :span="24">
  131. <div
  132. class="flood-plan-page"
  133. ref="animationFlow"
  134. style="display: block; height: 72vh; margin-top: 10px"
  135. >
  136. <iframe
  137. scrolling="no"
  138. :src="urlThreeP"
  139. ref="unityIframe"
  140. frameborder="0"
  141. :width="widthIframe"
  142. :height="heightIframe"
  143. >
  144. </iframe>
  145. </div>
  146. </el-col>
  147. </el-row>
  148. </el-col>
  149. <el-col :span="1"> &nbsp; </el-col>
  150. </el-row>
  151. </div>
  152. </template>
  153. <script>
  154. import Utils from "./util.js";
  155. const fs = require("fs");
  156. const { ipcRenderer } = require("electron");
  157. export default {
  158. data() {
  159. return {
  160. buttonDisable: true,
  161. //脉搏开始前倒计时
  162. pulseTimeNum: 180,
  163. pulseTime: null,
  164. gameValue: 0,
  165. timeShow: "",
  166. buttonFlag: "开始",
  167. //脑电是否连接的状态
  168. eleFlag: "未连接",
  169. //脉搏是否连接的状态
  170. pulseFlag: "未连接",
  171. widthIframe: 900,
  172. heightIframe: 600,
  173. // this.urlThreeP = "../../../static/BuildFlower/index.html";
  174. // urlThreeP: "../../../static/candle/index.html",
  175. urlThreeP: __static + "/candle/index.html",
  176. flag: 1,
  177. //游戏场景
  178. gameScene: 1,
  179. optionsGame: [
  180. {
  181. value: 1,
  182. label: "心灵之火",
  183. },
  184. {
  185. value: 2,
  186. label: "心之花",
  187. },
  188. {
  189. value: 3,
  190. label: "急速赛车",
  191. },
  192. {
  193. value: 4,
  194. label: "爆爆桶",
  195. },
  196. {
  197. value: 5,
  198. label: "炸弹",
  199. },
  200. {
  201. value: 6,
  202. label: "漂浮球",
  203. },
  204. ],
  205. //设备选择
  206. equipment: 1,
  207. optionsEquipment: [
  208. { value: 1, label: "脑电" },
  209. { value: 2, label: "脉搏" },
  210. ],
  211. //游戏难度
  212. gameDifficulty: 1,
  213. difficultyOptions: [
  214. { value: 1, label: "简单" },
  215. { value: 2, label: "普通" },
  216. { value: 3, label: "困难" },
  217. ],
  218. //游戏时间
  219. gameTimeReserve: 180,
  220. gameTime: 1,
  221. timeOptions: [
  222. { value: 1, label: "三分钟" },
  223. { value: 2, label: "五分钟" },
  224. { value: 3, label: "十分钟" },
  225. ],
  226. waitTimePluse: 0,
  227. testTime: 0,
  228. gameTimeTimer: null,
  229. //是否显示的倒计时标志
  230. gameTimeTimerFlag: false,
  231. //脉搏原始数据
  232. };
  233. },
  234. activated() {
  235. let that = this;
  236. setTimeout(() => {
  237. that.getSize();
  238. }, 5000);
  239. },
  240. mounted() {
  241. let that = this;
  242. let count = 0;
  243. var k = 1;
  244. var flagAnimation = true;
  245. window.addEventListener("resize", function () {
  246. // that.getSize();
  247. if (flagAnimation) {
  248. setTimeout(() => {
  249. that.getSize();
  250. flagAnimation = true;
  251. }, 1000);
  252. }
  253. flagAnimation = false;
  254. });
  255. Utils.$on("fatigue", function (msg) {
  256. if (msg.status == "未连接") {
  257. that.eleFlag = "未连接";
  258. // that.resetData();
  259. //如果是未连接则点击按钮时提醒脑电未连接
  260. } else if (msg.status == "已连接") {
  261. that.eleFlag = "已连接";
  262. //已连接后处理得到的值
  263. let a = msg.attentionGame;
  264. let diff = 1;
  265. if (that.gameDifficulty == 1) {
  266. diff = 1.5;
  267. } else if (that.gameDifficulty == 2) {
  268. diff = 1.25;
  269. } else {
  270. diff = 1;
  271. }
  272. if (that.equipment === 1 && that.buttonFlag == "结束") {
  273. if (a == 0) {
  274. that.gameValue = 0;
  275. } else {
  276. that.gameValue = (a / 100) * diff;
  277. }
  278. if (isNaN(that.gameValue)) {
  279. that.gameValue = 0;
  280. }
  281. that.send(that.gameValue);
  282. }
  283. }
  284. });
  285. Utils.$on("pulse", function (msg) {
  286. if (msg.status == "未连接") {
  287. that.pulseFlag = "未连接";
  288. // that.resetData();
  289. //假如脉搏是未连接的,点击开始按钮时提示脉搏未连接
  290. } else {
  291. that.pulseFlag = "已连接";
  292. //假如已经连接则判断返回的时间字段是多少
  293. //当前是否已连接如果已连接查看是否是脉搏如果是脉搏则判断3分钟是否已过
  294. that.waitTimePluse = msg.waitTime;
  295. if (msg.waitTime == 0) {
  296. //将指标写入文件
  297. console.log("------------------");
  298. // that.saveFileGame(JSON.stringify(msg.bbGame))
  299. // fs.appendFile(’./data1.txt’,‘hello\n’,(err)=>{
  300. // if(err) throw err;
  301. // console.log(‘写入成功’);
  302. // });
  303. let a = msg.pulseGame;
  304. // if (a > 30) {
  305. // a = 30;
  306. // }
  307. let diff = 1;
  308. if (that.gameDifficulty == 1) {
  309. diff = 1.5;
  310. } else if (that.gameDifficulty == 2) {
  311. diff = 1.25;
  312. } else {
  313. diff = 1;
  314. }
  315. if (that.equipment === 2 && that.buttonFlag == "结束") {
  316. //如果a等于0时gameValue就等于0
  317. if (a == 0) {
  318. that.gameValue = 0;
  319. } else {
  320. that.gameValue = (a / 100) * diff * 2;
  321. }
  322. //当发现这个值是NAN时需要将值改为0
  323. if (isNaN(that.gameValue)) {
  324. that.gameValue = 0;
  325. }
  326. //当测试发现数据是NAN时
  327. that.send(that.gameValue);
  328. }
  329. //发送信号的时候需要判断选择的难度
  330. //简单为现在的值乘以1
  331. //普通为现在的值乘以0.8
  332. //困难为现在的值乘以0.6
  333. } else {
  334. //假如已经连接了,但是不够3分钟点击按钮时进行提示
  335. //采集时间限制,倒计时三分钟
  336. }
  337. }
  338. });
  339. //设置定时器每秒定时器
  340. setInterval(() => {
  341. //当按钮开始时需要发送信息到
  342. //当按钮处于结束状态时
  343. if (that.buttonFlag == "结束") {
  344. //当前设备是选择的哪一个
  345. //如果选择的是脑电时
  346. //判断脑电是否连接
  347. //如果脑电连接则发送send(0)
  348. if (that.equipment == 1) {
  349. if (that.eleFlag == "未连接") {
  350. if (that.gameValue != 0) {
  351. that.send(0);
  352. }
  353. }
  354. } else {
  355. if (that.pulseFlag == "未连接") {
  356. if (that.gameValue != 0) {
  357. that.send(0);
  358. }
  359. }
  360. }
  361. //脉搏同样也是如此
  362. //选择时间时初始化一个时间
  363. // if (that.gameTimeReserve > 0) {
  364. // that.timeShow = that.formatterTimeFun(that.gameTimeReserve);
  365. // that.gameTimeReserve -= 1;
  366. // } else if (that.gameTimeReserve == 0) {
  367. // that.resetData();
  368. // }
  369. }
  370. }, 1000);
  371. },
  372. methods: {
  373. //保存文件
  374. saveFileGame(val) {
  375. fs.appendFile("D:\\pulseGame.txt", val+"@", (err) => {
  376. if (err) {
  377. console.error("Error writing to file:", err);
  378. } else {
  379. // console.log("Content appended successfully to file");
  380. }
  381. });
  382. },
  383. //切换选项时需要清空数据
  384. clearDataFun() {
  385. //1.首先清楚所有定时器
  386. clearInterval(this.pulseTime);
  387. clearInterval(this.gameTimeTimer);
  388. //2.计时的时间
  389. this.pulseTimeNum = 180;
  390. //3.重置开始的按钮
  391. this.buttonFlag = "开始";
  392. this.gameTimeTimerFlag = false;
  393. //4.重置数据
  394. this.resetData();
  395. },
  396. resetData() {
  397. this.send(0);
  398. this.buttonFlag = "开始";
  399. if (this.gameTime == 1) {
  400. this.gameTimeReserve = 180;
  401. this.timeShow = "03:00";
  402. } else if (this.gameTime == 2) {
  403. this.gameTimeReserve = 300;
  404. this.timeShow = "05:00";
  405. } else if (this.gameTime == 3) {
  406. this.gameTimeReserve = 600;
  407. this.timeShow = "10:00";
  408. }
  409. },
  410. //格式化倒计时格式
  411. formatterTimeFun(val) {
  412. let min = Math.floor(val / 60);
  413. min = this.formatterSs(min);
  414. let ss = val % 60;
  415. ss = this.formatterSs(ss);
  416. return min + ":" + ss;
  417. },
  418. formatterSs(val) {
  419. if (val < 10) {
  420. return "0" + val;
  421. } else {
  422. return val + "";
  423. }
  424. },
  425. gameTimeFun(val) {
  426. this.clearDataFun();
  427. if (val == 1) {
  428. this.gameTimeReserve = 180;
  429. } else if (val == 2) {
  430. this.gameTimeReserve = 300;
  431. } else if (val == 3) {
  432. this.gameTimeReserve = 600;
  433. }
  434. },
  435. //当设备更换时需要初始化动画数值为0
  436. //并且按钮初始化为开始状态
  437. //倒计时时间也变为最初始化
  438. //定时3分钟倒计时方法
  439. // threeReserve(){
  440. // },
  441. gameDiffFun() {
  442. this.clearDataFun();
  443. },
  444. equipmentFun(val) {
  445. //先判断当选择的设备是否连接
  446. //如果已连接,则继续测试
  447. //如果未连接则提示连接设备
  448. //先判断脑电
  449. this.clearDataFun();
  450. this.send(0);
  451. if (val == 1) {
  452. if (this.eleFlag == "未连接") {
  453. this.buttonDisable = true;
  454. this.resetData();
  455. this.$message.warning("请先连接脑电设备");
  456. } else {
  457. this.buttonDisable = false;
  458. this.resetData();
  459. }
  460. } else {
  461. this.buttonDisable = true;
  462. if (this.pulseFlag == "未连接") {
  463. this.resetData();
  464. this.$message.warning("请先连接脉搏设备");
  465. } else if (this.pulseFlag == "已连接") {
  466. if (this.waitTimePluse !== 0) {
  467. //执行一个方法进行定时计算
  468. // this.$message.warning(
  469. // "采集时间限制,倒计时" + this.waitTimePluse.toFixed(2) + "秒"
  470. // );
  471. //将时间重置为3分钟
  472. } else {
  473. this.resetData();
  474. }
  475. }
  476. }
  477. //结束测试
  478. },
  479. //需要先判断代码是否点击开始测试按钮了
  480. //如果点击开始测试按钮了//才能发送信号到游戏
  481. //定时器方法进行倒计时
  482. //这是脉搏点击开始的倒计时
  483. //倒计时结束以后进行3分钟或5分钟倒计时或十分钟倒计时
  484. //然后自动结束
  485. timeFun1() {
  486. let that = this;
  487. clearInterval(that.pulseTime);
  488. that.pulseTimeNum = 180;
  489. that.pulseTime = setInterval(() => {
  490. that.timeShow = that.formatterTimeFun(that.pulseTimeNum);
  491. that.pulseTimeNum--;
  492. if (that.pulseTimeNum == 0) {
  493. // that.buttonDisable = false;
  494. //将状态改为结束
  495. // this.buttonFlag = "结束";
  496. clearInterval(that.pulseTime);
  497. //倒计时开始后需要
  498. that.timeCom();
  499. // if (this.equipment == 1) {
  500. // Utils.$emit("animation-ele", {
  501. // command: "结束",
  502. // gameScene: this.gameScene,
  503. // gameDifficulty: this.gameDifficulty,
  504. // gameTime: this.gameTime,
  505. // });
  506. // }
  507. // if (this.equipment == 2) {
  508. // Utils.$emit("animation-pulse", {
  509. // command: "结束",
  510. // gameScene: this.gameScene,
  511. // gameDifficulty: this.gameDifficulty,
  512. // gameTime: this.gameTime,
  513. // });
  514. // }
  515. }
  516. }, 1000);
  517. },
  518. timeCom() {
  519. //有个标志显示当前的倒计时的状态
  520. this.gameTimeTimerFlag = true;
  521. //获取当前选择的是几分钟
  522. //当选择的是3分钟时
  523. //this.gameTimeReserve
  524. this.gameTimeTimer = setInterval(() => {
  525. this.timeShow = this.formatterTimeFun(this.gameTimeReserve);
  526. this.gameTimeReserve--;
  527. if (this.gameTimeReserve == 0) {
  528. clearInterval(this.gameTimeTimer);
  529. //当倒计时为0
  530. //按钮状态改为结束
  531. this.gameTimeTimerFlag = false;
  532. this.buttonFlag = "开始";
  533. if (this.equipment == 1) {
  534. Utils.$emit("animation-ele", {
  535. command: "结束",
  536. gameScene: this.gameScene,
  537. gameDifficulty: this.gameDifficulty,
  538. gameTime: this.gameTime,
  539. });
  540. }
  541. if (this.equipment == 2) {
  542. Utils.$emit("animation-pulse", {
  543. command: "结束",
  544. gameScene: this.gameScene,
  545. gameDifficulty: this.gameDifficulty,
  546. gameTime: this.gameTime,
  547. });
  548. }
  549. this.resetData();
  550. }
  551. }, 1000);
  552. },
  553. startTest() {
  554. //首先先判断是脑电还是脉搏
  555. if (this.buttonFlag == "开始") {
  556. if (this.equipment == 1) {
  557. //如果是脑电.则需要判断脑电是否连接
  558. if (this.eleFlag == "未连接") {
  559. this.$message.warning("请先连接脑电设备");
  560. } else if (this.eleFlag == "已连接") {
  561. Utils.$emit("animation-ele", {
  562. command: "开始",
  563. gameScene: this.gameScene,
  564. gameDifficulty: this.gameDifficulty,
  565. gameTime: this.gameTime,
  566. });
  567. this.buttonFlag = "结束";
  568. this.timeCom();
  569. }
  570. } else {
  571. //如果是脉搏,则需要判断脉搏是否是连接
  572. if (this.pulseFlag == "未连接") {
  573. this.$message.warning("请先连接脉搏设备");
  574. } else if (this.pulseFlag == "已连接") {
  575. //如果是脉搏已连接
  576. //点击了开始按钮
  577. //则开始倒计时3分钟
  578. this.timeFun1();
  579. Utils.$emit("animation-pulse", {
  580. command: "开始",
  581. gameScene: this.gameScene,
  582. gameDifficulty: this.gameDifficulty,
  583. gameTime: this.gameTime,
  584. });
  585. // if (this.waitTimePluse !== 0) {
  586. // this.$message.warning(
  587. // "采集时间限制,倒计时" + this.waitTimePluse.toFixed(2) + "秒"
  588. // );
  589. // } else {
  590. this.buttonFlag = "结束";
  591. // }
  592. }
  593. }
  594. } else {
  595. //当是结束时需要重置倒计时以及按钮显示
  596. //结束的时候需要看是否是脉博
  597. //如果是脉搏结束的时候需要将按钮变为不可选状态
  598. // if (this.equipment == 1) {
  599. // Utils.$emit("animation-ele", {
  600. // command: "结束",
  601. // gameScene: this.gameScene,
  602. // gameDifficulty: this.gameDifficulty,
  603. // gameTime: this.gameTime,
  604. // });
  605. // }
  606. // if (this.equipment == 2) {
  607. // Utils.$emit("animation-pulse", {
  608. // command: "结束",
  609. // gameScene: this.gameScene,
  610. // gameDifficulty: this.gameDifficulty,
  611. // gameTime: this.gameTime,
  612. // });
  613. // }
  614. //改变按钮状态
  615. this.clearDataFun();
  616. this.resetData();
  617. }
  618. },
  619. setUrl() {},
  620. getSize() {
  621. let width = this.$refs.animationFlow.clientWidth;
  622. let height = this.$refs.animationFlow.clientHeight - 20;
  623. this.widthIframe = width;
  624. this.heightIframe = height + 20;
  625. this.changeSize(width, height);
  626. },
  627. changeSize(width, height) {
  628. this.$refs.unityIframe.contentWindow.changeSize(width, height);
  629. },
  630. send(val) {
  631. this.$refs.unityIframe.contentWindow.Bloomsize(val);
  632. },
  633. // btt() {
  634. // let that = this;
  635. // this.$refs.unityvueFlower.message("flower", "enableCamera", "true");
  636. // },
  637. delayTime() {
  638. let that = this;
  639. setTimeout(() => {
  640. that.getSize();
  641. }, 5000);
  642. },
  643. changeGame(val) {
  644. this.clearDataFun();
  645. switch (val) {
  646. case 1:
  647. //this.urlThreeP = "../../../static/candle/index.html";
  648. this.urlThreeP = __static + "/candle/index.html";
  649. this.delayTime();
  650. break;
  651. case 2:
  652. //this.urlThreeP = "../../../static/flower/index.html";
  653. this.urlThreeP = __static + "/flower/index.html";
  654. this.delayTime();
  655. break;
  656. case 3:
  657. //this.urlThreeP = "../../../static/car/index.html";
  658. this.urlThreeP = __static + "/car/index.html";
  659. this.delayTime();
  660. break;
  661. case 4:
  662. //this.urlThreeP = "../../../static/baobaotong/index.html";
  663. this.urlThreeP = __static + "/baobaotong/index.html";
  664. this.delayTime();
  665. break;
  666. case 5:
  667. this.urlThreeP = "../../../static/bomb/index.html";
  668. //this.urlThreeP = __static + "/bomb/index.html";
  669. this.delayTime();
  670. break;
  671. case 6:
  672. //this.urlThreeP = "../../../static/piaofuqiu/index.html";
  673. this.urlThreeP = __static + "/piaofuqiu/index.html";
  674. this.delayTime();
  675. break;
  676. default:
  677. //this.urlThreeP = "../../../static/candle/index.html";
  678. this.urlThreeP = __static + "/candle/index.html";
  679. }
  680. this.gameScene = val;
  681. this.flag = this.gameScene;
  682. },
  683. chlz() {
  684. this.sendUnity(Math.round(Math.random() * 100));
  685. },
  686. sendUnity(val) {
  687. let a = val / 100;
  688. this.$refs.unityvue.message("littlefire", "sssize", a);
  689. },
  690. goBack() {
  691. this.$router.go(-1);
  692. },
  693. },
  694. };
  695. </script>
  696. <style scoped>
  697. .xl_d_button {
  698. background: rgb(87, 172, 187);
  699. opacity: 1;
  700. border-radius: 18px;
  701. font-size: 14px;
  702. font-family: PingFang SC;
  703. font-weight: 400;
  704. color: #ffffff;
  705. margin-bottom: 20px;
  706. }
  707. .xl_d_button:hover {
  708. background: rgb(87, 172, 187);
  709. opacity: 1;
  710. border-radius: 18px;
  711. font-size: 14px;
  712. font-family: PingFang SC;
  713. font-weight: 400;
  714. color: #ffffff;
  715. margin-bottom: 20px;
  716. }
  717. .xl_d_button:focus {
  718. background: rgb(87, 172, 187);
  719. opacity: 1;
  720. border-radius: 18px;
  721. font-size: 14px;
  722. font-family: PingFang SC;
  723. font-weight: 400;
  724. color: #ffffff;
  725. margin-bottom: 20px;
  726. }
  727. .xl_d_button.is-disabled,
  728. .xl_d_button.is-disabled:focus,
  729. .xl_d_button.is-disabled:hover {
  730. color: #c0c4cc;
  731. cursor: not-allowed;
  732. background-image: none;
  733. background-color: rgb(87, 172, 187);
  734. border-color: #ebeef5;
  735. }
  736. canvas {
  737. /* width: 100%;
  738. height: 100%; */
  739. }
  740. .main-unity {
  741. margin-top: 10px;
  742. }
  743. </style>
  744. <style>
  745. .footer {
  746. text-align: center;
  747. }
  748. .fullscreen {
  749. margin-top: 25px !important;
  750. text-align: center !important;
  751. display: none !important;
  752. }
  753. .musicTitle {
  754. display: block;
  755. font-size: 18px;
  756. color: #57acbb;
  757. margin-bottom: 5px;
  758. }
  759. .flood-plan-page {
  760. /* margin-top:20px; */
  761. }
  762. .selectSty {
  763. width: 100px;
  764. }
  765. .desSty {
  766. font-size: 12px;
  767. }
  768. </style>