1.style.css
body { --bubble_time: 3s; --bubble_scale: 0.8s; } .praise_bubble { width: 100px; height: 200px; position: relative; background-color: #f4f4f4; } .bubble { position: absolute; width: 40px; height: 40px; left: 30px; bottom: 0px; background-repeat: no-repeat; background-size: 100%; transform-origin: bottom; } .b1 { background-image: url(./images/bg1.png); /* // 可以使用雪碧图 // background-position: -42px -107px; // background-size: 188.5px 147px; */ } .b2 { background-image: url(./images/bg2.png); /* // background-position: -84px -107px; // background-size: 188.5px 147px; */ } .b3 { background-image: url(./images/bg3.png); /* // background-position: 0 -107px; // background-size: 188.5px 147px; */ } .b4 { background-image: url(./images/bg4.png); /* // background-position: -45px -62px; // background-size: 188.5px 147px; */ } .b5 { background-image: url(./images/bg5.png); /* // background-position: -107px -42px; // background-size: 188.5px 147px; */ } .b6 { background-image: url(./images/bg6.png); /* // background-position: -107px 0; // background-size: 188.5px 147px; */ } .bl1 { animation: bubble_1 var(--bubble_time) linear 1 forwards, bubble_big_1 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl2 { animation: bubble_2 var(--bubble_time) linear 1 forwards, bubble_big_2 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl3 { animation: bubble_3 var(--bubble_time) linear 1 forwards, bubble_big_1 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl4 { animation: bubble_4 var(--bubble_time) linear 1 forwards, bubble_big_2 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl5 { animation: bubble_5 var(--bubble_time) linear 1 forwards, bubble_big_1 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl6 { animation: bubble_6 var(--bubble_time) linear 1 forwards, bubble_big_3 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl7 { animation: bubble_7 var(--bubble_time) linear 1 forwards, bubble_big_1 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl8 { animation: bubble_8 var(--bubble_time) linear 1 forwards, bubble_big_3 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl9 { animation: bubble_9 var(--bubble_time) linear 1 forwards, bubble_big_2 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl10 { animation: bubble_10 var(--bubble_time) linear 1 forwards, bubble_big_1 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } .bl11 { animation: bubble_11 var(--bubble_time) linear 1 forwards, bubble_big_2 var(--bubble_scale) linear 1 forwards, bubble_y var(--bubble_time) linear 1 forwards; } @keyframes bubble_11 { 0% { } 25% { margin-left: -10px; } 50% { margin-left: -10px; } 100% { margin-left: -18px; } } @keyframes bubble_10 { 0% { } 25% { margin-left: -20px; } 50% { margin-left: -20px; } 100% { margin-left: -20px; } } @keyframes bubble_9 { 0% { } 25% { margin-left: 10px; } 50% { margin-left: 10px; } 100% { margin-left: 10px; } } @keyframes bubble_8 { 0% { } 25% { margin-left: 20px; } 50% { margin-left: 20px; } 100% { margin-left: 20px; } } @keyframes bubble_7 { 0% { } 25% { margin-left: 3px; } 50% { margin-left: 1px; } 75% { margin-left: 2px; } 100% { margin-left: 3px; } } @keyframes bubble_6 { 0% { } 25% { margin-left: -3px; } 50% { margin-left: -1px; } 75% { margin-left: -2px; } 100% { margin-left: -3px; } } @keyframes bubble_5 { 0% { } 25% { margin-left: 5px; } 50% { margin-left: -5px; } 75% { margin-left: -10px; } 100% { margin-left: -20px; } } @keyframes bubble_4 { 0% { } 25% { margin-left: -5px; } 50% { margin-left: -5px; } 75% { margin-left: 20px; } 100% { margin-left: 10px; } } @keyframes bubble_3 { 0% { } 25% { margin-left: -20px; } 50% { margin-left: 10px; } 75% { margin-left: 20px; } 100% { margin-left: -10px; } } @keyframes bubble_2 { 0% { } 25% { margin-left: 20px; } 50% { margin-left: 25px; } 75% { margin-left: 10px; } 100% { margin-left: 5px; } } @keyframes bubble_1 { 0% { } 25% { margin-left: -8px; } 50% { margin-left: 8px; } 75% { margin-left: -15px; } 100% { margin-left: 15px; } } @keyframes bubble_big_1 { 0% { transform: scale(0.3); } 100% { transform: scale(1.2); } } @keyframes bubble_big_2 { 0% { transform: scale(0.3); } 100% { transform: scale(0.9); } } @keyframes bubble_big_3 { 0% { transform: scale(0.3); } 100% { transform: scale(0.6); } } @keyframes bubble_y { 0% { margin-bottom: 0; } 10% { margin-bottom: 0; } 75% { opacity: 1; } 100% { margin-bottom: 200px; opacity: 0; } }2.startPlus.vue
<style scoped> @import url(style.css); </style> <template> <div class="startPlus"> <div class="praise_bubble" id="praise_bubble"></div> <button @click="addPraise">点赞</button> </div> </template> <script> export default { name: "startPlus", components: {}, props: {}, data() { return {}; }, watch: {}, computed: {}, methods: { addPraise() { let praiseBubble = document.getElementById("praise_bubble"); const b = Math.floor(Math.random() * 6) + 1; const bl = Math.floor(Math.random() * 11) + 1; // bl1~bl11 let d = document.createElement("div"); d.className = `bubble b${b} bl${bl}`; d.dataset.t = String(Date.now()); praiseBubble.appendChild(d); setTimeout(() => { praiseBubble.removeChild(d); }, 3000); } }, created() {}, mounted() { } }; </script>3.创建图片文件夹images
放入图片