用vue实现点击按钮打乱五个城市程序,并且将每次点击的程序记录在本地存储中。
首页:
<!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>首页</title> <link rel="stylesheet" href="css/index.css"> <link rel="stylesheet" href="css/common.css"></head><body> <div id="app" v-cloak> <div class="index"> <audio id="audio" src="audio/1.mp3" loop> Your browser does not support the audio element. </audio> <img class="bg" src="img/bg.png" alt=""> <img class="light" src="img/light.gif" alt=""> <div class="content"> <div class="item" v-for="(item, index) in city" :key="index"> <img class="img" :src="item.src" alt /> </div> </div> <div class="bottom-info"> <div class="switch" @click="scatter"> <img v-if="isOk" src="img/stop.png" alt=""> <img v-else src="img/go.png" alt=""> </div> <!-- <span class="watch" @click.once="watch">查看程序</span> --> </div> <a class="detailBtn" href="sequence.html" target="_blank">明细</a> </div> </div> <script src="js/vue.min.js"></script> <script src="js/rem.js"></script> <script type="text/javascript">// localStorage// sessionStorage new Vue({ 'el': '#app', data() { return { city: [ { name: "上海", src: "img/1.png" }, { name: "武汉", src: "img/2.png" }, { name: "南京", src: "img/3.png" }, { name: "无锡", src: "img/4.png" }, { name: "杭州", src: "img/5.png" }, ], isOk: false, timer: null, obj: [], }; }, methods: { // 打乱数组程序 randSort1(arr) { for (var i = 0, len = arr.length; i < len; i++) { var rand = parseInt(Math.random() * len); var temp = arr[rand]; arr[rand] = arr[i]; arr[i] = temp; } return arr; }, scatter() { var arrs = []; this.isOk = !this.isOk; var audio = document.getElementById("audio"); if (this.time) { clearInterval(this.time); }; if (this.isOk) { audio.play(); this.time = setInterval(() => { var arr = this.randSort1(this.city); this.city.forEach((item, index) => { this.$set(this.city, index, arr[index]); }) }, 50); } else { audio.pause(); clearInterval(this.time); this.city.map((item) => { arrs.push(item); }); console.log(arrs) this.obj.push(arrs) localStorage.setItem('obj', JSON.stringify(this.obj)); console.log(JSON.parse(localStorage.getItem('obj'))) } }, }, mounted() { // localStorage.setItem('obj', JSON.stringify(this.obj)); if(localStorage.getItem('obj')) { this.obj = JSON.parse(localStorage.getItem('obj')); this.city = this.obj.pop(); }; } }) </script></body></html>
具体页面:
<!DOCTYPE html><html lang="zh"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>明细</title> <link rel="stylesheet" href="css/index.css"> <link rel="stylesheet" href="css/common.css"></head><body> <div id="app" v-cloak> <div class="sequence"> <div v-for="(item, index) in sequenceArr" :key="index"> <span>第{{index + 1}}次:</span> <span v-for="(item2, index2) in item" :key="index2">{{item2.name}}</span> </div> <button @click="clear">清空</button> </div> </div> <script src="js/vue.min.js"></script> <script src="js/rem.js"></script> <script type="text/javascript"> new Vue({ 'el': '#app', data() { return { sequenceArr: JSON.parse(localStorage.getItem('obj')), }; }, methods: { clear() { localStorage.removeItem("obj"); this.sequenceArr = localStorage.removeItem("obj") } }, mounted() { // this.sequenceArr = JSON.parse(localStorage.getItem('obj')); console.log(this.sequenceArr) } }) </script> <style> .sequence { font-size: 20px; /* padding-top: 50px; */ } .sequence span { margin-right: 10px; } button { width: 100px; height: 50px; margin-top: 20px; } </style>
下面的代码实现了点击切换城市,和记录点击的每次程序,因为用了localStorage,所以关掉浏览器再关上页面展现的也仍旧是最初点击的那次程序,这就避免了主持人误操作后遗记了城市程序。另一个页面不仅能够记录,还有清空按钮。