svg+js实现带表情变化星级评分效果代码
代码语言:html
所属分类:星级评分
代码描述:svg+js实现带表情变化星级评分效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> * { box-sizing: border-box; } .container { display: flex; flex-wrap: wrap; height: 100vh; align-items: center; justify-content: center; padding: 0 20px; } .rating { display: flex; width: 100%; justify-content: center; overflow: hidden; flex-direction: row-reverse; height: 150px; position: relative; } .rating-0 { -webkit-filter: grayscale(100%); filter: grayscale(100%); } .rating > input { display: none; } .rating > label { cursor: pointer; width: 40px; height: 40px; margin-top: auto; background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='126.729' height='126.73'%3e%3cpath fill='%23e3e3e3' d='M121.215 44.212l-34.899-3.3c-2.2-.2-4.101-1.6-5-3.7l-12.5-30.3c-2-5-9.101-5-11.101 0l-12.4 30.3c-.8 2.1-2.8 3.5-5 3.7l-34.9 3.3c-5.2.5-7.3 7-3.4 10.5l26.3 23.1c1.7 1.5 2.4 3.7 1.9 5.9l-7.9 32.399c-1.2 5.101 4.3 9.3 8.9 6.601l29.1-17.101c1.9-1.1 4.2-1.1 6.1 0l29.101 17.101c4.6 2.699 10.1-1.4 8.899-6.601l-7.8-32.399c-.5-2.2.2-4.4 1.9-5.9l26.3-23.1c3.8-3.5 1.6-10-3.6-10.5z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: center; background-size: 76%; transition: .3s; } .rating > input:checked ~ label, .rating > input:checked ~ label ~ label { background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='126.729' height='126.73'%3e%3cpath fill='%23fcd93a' d='M121.215 44.212l-34.899-3.3c-2.2-.2-4.101-1.6-5-3.7l-12.5-30.3c-2-5-9.101-5-11.101 0l-12.4 30.3c-.8 2.1-2.8 3.5-5 3.7l-34.9 3.3c-5.2.5-7.3 7-3.4 10.5l26.3 23.1c1.7 1.5 2.4 3.7 1.9 5.9l-7.9 32.399c-1.2 5.101 4.3 9.3 8.9 6.601l29.1-17.101c1.9-1.1 4.2-1.1 6.1 0l29.101 17.101c4.6 2.699 10.1-1.4 8.899-6.601l-7.8-32.399c-.5-2.2.2-4.4 1.9-5.9l26.3-23.1c3.8-3.5 1.6-10-3.6-10.5z'/%3e%3c/svg%3e"); } .rating > input:not(:checked) ~ label:hover, .rating > input:not(:checked) ~ label:hover ~ label { background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='126.729' height='126.73'%3e%3cpath fill='%23d8b11e' d='M121.215 44.212l-34.899-3.3c-2.2-.2-4.101-1.6-5-3.7l-12.5-30.3c-2-5-9.101-5-11.101 0l-12.4 30.3c-.8 2.1-2.8 3.5-5 3.7l-34.9 3.3c-5.2.5-7.3 7-3.4 10.5l26.3 23.1c1.7 1.5 2.4 3.7 1.9 5.9l-7.9 32.399c-1.2 5.101 4.3 9.3 8.9 6.601l29.1-17.101c1.9-1.1 4.2-1.1 6.1 0l29.101 17.101c4.6 2.699 10.1-1.4 8.899-6.601l-7.8-32.399c-.5-2.2.2-4.4 1.9-5.9l26.3-23.1c3.8-3.5 1.6-10-3.6-10.5z'/%3e%3c/svg%3e"); } .emoji-wrapper { width: 100%; text-align: center; height: 100px; overflow: hidden; position: absolute; top: 0; left: 0; } .emoji-wrapper:before, .emoji-wrapper:after { content: ""; height: 15px; width: 100%; position: absolute; left: 0; z-index: 1; } .emoji-wrapper:before { top: 0; background: linear-gradient(to bottom, white 0%, white 35%, rgba(255, 255, 255, 0) 100%); } .emoji-wrapper:after { bottom: 0; background: linear-gradient(to top, white 0%, white 35%, rgba(255, 255, 255, 0) 100%); } .emoji { display: flex; flex-direction: column; align-items: center; transition: .3s; } .emoji > svg { margin: 15px 0; width: 70px; height: 70px; flex-shrink: 0; } #rating-1:checked ~ .emoji-wrapper > .emoji { -webkit-transform: translateY(-100px); transform: translateY(-100px); } #rating-2:checked ~ .emoji-wrapper > .emoji { -webkit-transform: translateY(-200px); transform: translateY(-200px); } #rating-3:checked ~ .emoji-wrapper > .emoji { -webkit-transform: translateY(-300px); transform: translateY(-300px); } #rating-4:checked ~ .emoji-wrapper > .emoji { -webkit-transform: translateY(-400px); transform: translateY(-400px); } #rating-5:checked ~ .emoji-wrapper > .emoji { -webkit-transform: translateY(-500px); transform: translateY(-500px); } .feedback { max-width: 360px; background-color: #fff; width: 100%; padding: 30px; border-radius: 8px; display: flex; flex-direction: column; flex-wrap: wrap; align-items: center; box-shadow: 0 4px 30px rgba(0, 0, 0, 0.05); } </style> </head> <body> <div class="container"> <div class="feedback"> <div class="rating"> <input type="radio" name="rating" id="rating-5"> <label for="rating-5"></label> <input type="radio" name="rating" id="rating-4"> <label for="rating-4"></label> <input type="radio" name="rating" id="rating-3"> <label for="rating-3"></label> <input type="radio" name="rating" id="rating-2"> <label for="rating-2"></label> <input type="radio" name="rating" id="rating-1"> <label for="rating-1"></label> <div class="emoji-wrapper"> <div class="emoji"> <svg class="rating-0" xmlns="" viewBox="0 0 512 512"> <circle cx="256" cy="256" r="256" fill="#ffd93b"/> <path d="M512 256c0 141.44-114.64 256-256 256-80.48 0-152.32-37.12-199.28-95.28 43.92 35.52 99.84 56.72 160.72 56.72 141.36 0 256-114.56 256-256 0-60.88-21.2-116.8-56.72-160.72C474.8 103.68 512 175.52 512 256z" fill="#f4c534"/> <ellipse transform="scale(-1) rotate(31.21 715.433 -595.455)" cx="166.318" cy="199.829" rx="56.146" ry="56.13" fill="#fff"/> <ellipse transform="rotate(-148.804 180.87 175.82)" cx="180.871" cy="175.822" rx="28.048" ry="28.08" fill="#3e4347"/> <ellipse transform="rotate(-113.778 194.434 165.995)" cx="194.433" cy="165.993" rx="8.016" ry="5.296" fill="#5a5f63"/> <ellipse transform="scale(-1) rotate(31.21 715.397 -1237.664)" cx="345.695" cy="199.819" rx="56.146" ry="56.13" fill="#fff"/> <ellipse transform="rotate(-148.804 360.25 175.837)" cx="360.252" cy="175.84" rx="28.048" ry="28.08" fill="#3e4347"/> <ellipse transform="scale(-1) rotate(66.227 254.508 -573.138)" cx="373.794" cy="165.987" rx="8.016" ry="5.296" fill="#5a5f63"/> <path d="M370.56 344.4c0 7.696-6.224 13.92-13.92 13.92H155.36c-7.616 0-13.92-6.224-13.92-13.92s6.304-13.92 13.92-13.92h201.296c7.696.016 13.904 6.224 13.904 13.92z" fill="#3e4347"/> </svg> <svg class="rating-1" viewBox="0 0 512 512"> <circle cx="256" cy="256" r="256" fill="#ffd93b"/> <path d="M512 256A256 256 0 0 1 56.7 416.7a256 256 0 0 0 360-360c58.1 47 95.3 118.8 95.3 199.3z" fill="#f4c534"/> <path d="M328.4 428a92.8 92.8 0 0 0-145-.1 6.8 6.8 0 0 1-12-5.8 86.6 86.6 0 0 1 84.5-69 86.6 86.6 0 0 1 84.7 69.8c1.3 6.9-7.7 10.6-12.2 5.1z" fill="#3e4347"/> <path d="M269.2 222.3c5.3 62.8 52 113.9 104.8 113.9 52.3 0 90.8-51.1 85.6-113.9-2-25-10.8-47.9-23.7-66.7-4.1-6.1-12.2-8-18.5-4.2a111.8 111.8 0 0 1-60.1 16.2c-22.8 0-42.1-5.6-57.8-14.8-6.8-4-15.4-1.5-18.9 5.4-9 18.2-13.2 40.3-11.4 64.1z" fill="#f4c534"/> <path d=&.........完整代码请登录后点击上方下载按钮下载查看
网友评论0