
分类: 代码
-
如何用JS实现代码雨特效
如何用JS实现代码雨特效// 知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何用JS实现代码雨特效”吧。
html代码
<canvas id="code_rain_canvas" width="1440" height="900"></canvas>js 代码
window.onload = function() { //获取画布对象 var canvas = document.getElementById("code_rain_canvas"); //获取画布的上下文 var context = canvas.getContext("2d"); var s = window.screen; var W = canvas.width = s.width; var H = canvas.height; //获取浏览器屏幕的宽度和高度 //var W = window.innerWidth; //var H = window.innerHeight; //设置canvas的宽度和高度 canvas.width = W; canvas.height = H; //每个文字的字体大小 var fontSize = 12; //计算列 var colunms = Math.floor(W / fontSize); //记录每列文字的y轴坐标 var drops = []; //给每一个文字初始化一个起始点的位置 for (var i = 0; i < colunms; i++) { drops.push(0); } //运动的文字 var str = "WELCOME TO WWW.ITRHX.COM"; //4:fillText(str,x,y);原理就是去更改y的坐标位置 //绘画的函数 function draw() { context.fillStyle = "rgba(238,238,238,.08)"; //遮盖层 context.fillRect(0, 0, W, H); //给字体设置样式 context.font = "600 " + fontSize + "px Georgia"; //给字体添加颜色 context.fillStyle = ["#33B5E5", "#0099CC", "#AA66CC", "#9933CC", "#99CC00", "#669900", "#FFBB33", "#FF8800", "#FF4444", "#CC0000"][parseInt(Math.random() * 10)]; //randColor();可以rgb,hsl, 标准色,十六进制颜色 //写入画布中 for (var i = 0; i < colunms; i++) { var index = Math.floor(Math.random() * str.length); var x = i * fontSize; var y = drops[i] * fontSize; context.fillText(str[index], x, y); //如果要改变时间,肯定就是改变每次他的起点 if (y >= canvas.height && Math.random() > 0.99) { drops[i] = 0; } drops[i]++; } }; function randColor() { //随机颜色 var r = Math.floor(Math.random() * 256); var g = Math.floor(Math.random() * 256); var b = Math.floor(Math.random() * 256); return "rgb(" + r + "," + g + "," + b + ")"; } draw(); setInterval(draw, 35); };展示效果:

-
plugin-legacy 动态读取 .browserslistrc配置
前言
在前端开发中,为了确保一致和良好的用户体验,我们通常需要处理不同浏览器对 HTML、CSS 和 JavaScript 的支持差异。
在 Vite 生态中,我们通常使用
.browserslistrc文件来统一管理目标浏览器范围。像postcss-preset-env这样的工具会自动读取它来进行 CSS 降级。然而,一个常见痛点是@vitejs/plugin-legacy插件的modernTargets选项并不会自动读取该文件,需要我们手动配置。这就导致了同一个配置需要维护在两个地方:一份在
.browserslistrc中给 PostCSS 使用,另一份在vite.config.ts中给plugin-legacy使用。这种重复不仅繁琐,还极易因忘记同步更新而出错。本文将分享一个简洁的解决方案,通过代码实现配置的统一管理。
解决方案
我们的目标很明确:让
vite.config.ts能够取.browserslistrc文件的内容,并将其传递给@vitejs/plugin-legacy的modernTargets选项。幸运的是,几乎所有处理浏览器列表的工具(包括 Vite、Webpack 和 PostCSS 插件)都依赖同一个核心库:browserslist。我们可以直接利用这个库来 programmatic地 读取配置。
1. 安装依赖
首先,我们需要在项目中安装
browserslist作为开发依赖。pnpm i browserslist -D2. 修改 Vite 配置
// vite.config.ts import legacy from "@vitejs/plugin-legacy"; import browserslist from "browserslist"; export default defineConfig(({ mode }) => { const cwdPath = process.cwd(); return { plugins: [ // 兼容性 legacy({ modernTargets: browserslist.loadConfig({ path: cwdPath }), renderLegacyChunks: false }) ] } })代码解析:
- 我们使用
browserslist.loadConfig({ path: '.' })方法,它会自动在当前项目根目录(process.cwd( ))下查找并解析.browserslistrc文件。 - 该方法返回一个字符串数组(
string[]),其格式完全符合modernTargets选项的要求。 - 这样,
modernTargets的值就从硬编码的数组变成了动态读取的结果。
3. 创建
.browserslistrc文件如果在你的项目根目录还没有这个文件,请创建一个,并填入你的目标浏览器配置。
# .browserslistrc # 更多规则请参考 browserslist 官方文档 # https://github.com/browserslist/browserslist Chrome >= 61 Firefox >= 60 Safari >= 11 Edge >= 16 iOS >= 11注意:Vite 底层的打包工具 esbuild 不支持将代码转换为 ES5。因此,即使你在
.browserslistrc中设置了非常旧的浏览器(如 IE11),Vite 也无法生成完全兼容的 ES5 代码。这里的配置主要是为@vitejs/plugin-legacy和 PostCSS 提供统一的目标范围,确保语法转换和 Polyfill 的目标一致。总结
通过在
vite.config.ts中引入browserslist包,我们成功地让@vitejs/plugin-legacy插件动态读取了.browserslistrc文件的内容。这种方法不仅优雅地解决了配置重复的问题,还确保了项目中所有与浏览器兼容性相关的工具(如 PostCSS)都使用同一份配置,真正实现了“单一数据源”(Single Source of Truth),大大提升了项目的可维护性和健壮性。
- 我们使用
-
唯美动态漂亮个人404页面

404.html
<!doctype html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=375px,user-scalable=no,viewport-fit=cover" homon="true"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="ahot-aplus" content="1"> <meta name="aplus-rate-ahot" content="0.5"> <title>404页面</title> <link rel="stylesheet" href="css/index.css"> </head> <body> <div class="aliyun-module"> <div class="componenet-wrap ace-render-2"> <div class="" style="max-width: 100%;"> <div class="ace-yunqi-homepagetop-0907"> <h1 class="text-h1">背景切换</h1> <div class="background"> <img alt="背景图片-静态" src="picture/1.jpg" class="background-image-nagetive"> <img alt="背景图片-动态" src="picture/123.gif" class="background-image-active"> <img alt="背景图片-PC静态" src="picture/111.jpg" class="background-image-active-pc"> <video class="background-video" src="https://lumi.mihoyo.com/medias/bgvideo.13edb8ad.mp4" preload="auto" autoplay="" loop="" style="opacity: 1; transition: opacity 0.5s linear 0s;"></video></div> <div class="frame"> <div class="image-frame"><img src="picture/1.png" class="image is-visible" alt="主页图片"></div> <div class="button-group"> <a href="https://www.zhanid.com/">首页<div class="border-bottom"></div></a> <a href="http://wpa.qq.com/msgrd?v=3&uin=123456&site=qq&menu=yes">联系我<div class="border-bottom"></div></a> </div> </body> </body> </html>index.css
.ace-yunqi-homepagetop-0907{position:unset;width:100%;display:flex;flex-direction:column;align-items:center}.ace-yunqi-homepagetop-0907 .text-h1{display:none}.ace-yunqi-homepagetop-0907 .background{position:fixed;top:0;left:0;width:100%;height:100%}.ace-yunqi-homepagetop-0907 .background .background-image-active,.ace-yunqi-homepagetop-0907 .background .background-image-active-pc,.ace-yunqi-homepagetop-0907 .background .background-image-nagetive,.ace-yunqi-homepagetop-0907 .background .background-video{width:100%;height:100%;object-fit:fill;position:absolute;left:0;top:0}.ace-yunqi-homepagetop-0907 .return-button{color:#333!important;position:absolute;display:flex;align-items:center}.ace-yunqi-homepagetop-0907 .arrow_down{position:relative;z-index:3;padding-top:58px;width:58px;animation:move 1.2s linear 0s infinite alternate}@media only screen and (max-width:768px){.ace-yunqi-homepagetop-0907 .arrow_down{display:none}}.ace-yunqi-homepagetop-0907 .arrow_down img{width:100%;height:46px}@keyframes move{0%{top:0}50%{top:-10px}to{top:0}}@media only screen and (min-width:769px){.ace-yunqi-homepagetop-0907{height:100vh;justify-content:center}.ace-yunqi-homepagetop-0907 .background .background-image-active,.ace-yunqi-homepagetop-0907 .background .background-image-nagetive{display:none}.ace-yunqi-homepagetop-0907 .background .background-image-active-pc,.ace-yunqi-homepagetop-0907 .background .background-video{object-fit:cover;display:block}.ace-yunqi-homepagetop-0907 .background .background-image-active-pc{z-index:1}.ace-yunqi-homepagetop-0907 .background .background-video{z-index:2}.ace-yunqi-homepagetop-0907 .return-button{left:10px;top:85px;z-index:2}.ace-yunqi-homepagetop-0907 .bottom-operator{position:absolute;height:144px;width:100%;display:flex;justify-content:center;padding-top:28px;bottom:0}}@media only screen and (max-width:768px){.ace-yunqi-homepagetop-0907{height:calc(100vh - 20px);justify-content:start}.ace-yunqi-homepagetop-0907 .background{position:absolute}.ace-yunqi-homepagetop-0907 .background .background-image-active,.ace-yunqi-homepagetop-0907 .background .background-image-nagetive{display:block;object-fit:cover}.ace-yunqi-homepagetop-0907 .background .background-image-negative{z-index:1}.ace-yunqi-homepagetop-0907 .background .background-image-active{z-index:2}.ace-yunqi-homepagetop-0907 .background .background-image-active-pc,.ace-yunqi-homepagetop-0907 .background .background-video,.ace-yunqi-homepagetop-0907 .return-button{display:none}}.share-btn-box{cursor:pointer;display:inline-flex;height:30px}.share-btn-box>img{margin:6.75px 8px;width:16.5px;height:16.5px}.share-btn-box .share-btn{padding:0;border:0;height:30px;font-size:16px;color:#ff6a00;letter-spacing:.18px;text-align:center;line-height:30px}.yqdh-share-dialog{width:654px!important}.yqdh-share-dialog .ace-dialog-body{overflow:hidden!important;margin-bottom:0;padding:0}.yqdh-share-dialog .ace-dialog-close .ace-dialog-close-icon.ace-icon{margin-top:-10px}.yqdh-share-dialog .yqdh-share-box{display:flex}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-share-list{width:313px;display:flex}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-share-list>li{display:flex;flex-direction:column;justify-content:center;align-items:center;margin:0 63px 0 0}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-share-list>li>img{height:48px;width:48px;cursor:pointer}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-share-list>li>h5{margin-bottom:0;margin-top:3px;height:24px;font-size:14px;color:"#3c3c3c";text-align:justify;line-height:24px;font-weight:400}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-copy-link{margin-top:14px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-copy-link>p{height:24px;font-size:14px;color:"#3c3c3c";line-height:24px;margin-bottom:8px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-copy-link>div{display:flex}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-copy-link>div .ace-custom-input.ace-input.ace-medium{height:36px;width:210px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-copy-link>div .ace-custom-input.ace-input.ace-medium input{height:34px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-copy-link>div .link_copy_btn{border:0 none;height:36px;margin-left:-1px;width:81px;text-align:center;color:#fff;font-size:16px;cursor:pointer}.yqdh-share-dialog .yqdh-share-box .yqdh-share-left .yqdh-copy-link>div .link_copy_btn:hover{background-color:#ff6900}.yqdh-share-dialog .yqdh-share-box .left-right-hr{height:160px;width:1px;opacity:.4;border-right:1px solid #c3c5c6}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right{display:flex;width:316px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-left{width:137px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-left>ul{height:140px;margin-bottom:0}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-left>ul>li{display:flex;flex-direction:row;justify-content:center;align-items:center;margin:0 0 20px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-left>ul>li>img{height:48px;width:48px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-left>ul>li>h5{font-size:14px;color:#3d3d3d;margin-left:7px;margin-bottom:0;font-weight:400}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-left>h3{margin-bottom:0;margin:0 auto;text-align:center;line-height:20px;font-size:14px;font-weight:400;color:#3d3d3d}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-right{width:154px}.yqdh-share-dialog .yqdh-share-box .yqdh-share-right .right-box-right>img{height:154px;width:154px}.frame{width:auto;display:flex;flex-direction:column;align-items:center;z-index:3}.frame .button-group,.frame .image-frame{display:flex;justify-content:center}.frame .button-group{padding:20px}@media only screen and (min-width:769px){.frame .button-group a{display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:13px;height:40px;width:150px;color:#181818!important;line-height:37px;border:none;transition:none;cursor:pointer}.frame .button-group a .border-bottom{height:2px;width:30px;background:#4a4a4a;animation:animationVisible 1s linear 0s infinite alternate}.frame .button-group a:last-child .border-bottom{animation-delay:1s}.frame .button-group a:hover{background:hsla(0,0%,100%,.7);background-color:#ff6a00;color:#fff!important}.frame .button-group a:hover .border-bottom{background:transparent}}@media only screen and (max-width:768px){.frame .button-group a{height:40px;width:161px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;background-image:linear-gradient(90deg,#ff6a005c 4%,#ff530000 86%)}}@media only screen and (max-width:768px){.frame .button-group .second-button{margin-left:12px}}@keyframes animationVisible{0%{opacity:0}to{opacity:1}}.frame .button-group a:active,.frame .button-group a:link,.frame .button-group a:visited{text-decoration:none}.frame .email{display:flex;justify-content:center;height:17px;opacity:.6;font-family:PingFangSC-Regular;font-size:12px;color:#fff;letter-spacing:0}.frame .email .email-link{text-decoration:underline;cursor:pointer}.text-frame{display:flex;justify-content:center}.text-frame .date,.text-frame .text{font-family:PingFangSC-Regular;color:#fff;letter-spacing:0;text-align:left}.text-frame .border{color:#fff;margin:0 12px}@media only screen and (min-width:769px){.button-icon{display:block;width:18px;height:18px;margin-right:8px}.image-frame{width:932px;padding-bottom:40px}.image-frame .image{object-fit:contain;width:932px;height:190px;opacity:0;transform:translate3d(0,30px,0)}.image-frame .is-visible{opacity:1;transition:opacity .8s,transform .8s;transform:translateZ(0)}.text-frame{margin-bottom:40px}.border,.date,.text{font-size:29px;line-height:48px}.text{font-size:29px}}@media only screen and (max-width:768px){.button-icon{display:none}.image-frame{padding-top:75%;padding-bottom:20px;border-bottom:none}.image-frame .image{width:330px;height:260px;object-fit:contain}.text-frame{margin-bottom:120px}.border,.date,.text{font-size:16px}}.ace-overlay-wrapper .ace-overlay-backdrop{background-color:rgba(0,0,0,.75)}.video{background:#000}.video,.video .ace-dialog-body{padding:0}.play-button{width:160px;height:36px;z-index:3}.play-button .button{width:100%;height:100%;border:none;display:flex;align-items:center;justify-content:start;border-color:transparent;border-style:none;overflow:hidden;padding:0}@media only screen and (max-width:768px){.play-button .button{justify-content:center}}.play-button .button .play-text{display:none;line-height:36px;color:#181818;transition:all .8s}@media only screen and (max-width:768px){.play-button .button .play-text{display:inline;height:20px;line-height:20px;font-size:14px;color:#fe5300;letter-spacing:0;text-decoration:underline}}.play-button .play-icon{width:30px;height:30px;margin-right:14px;transition:all .8s}@media only screen and (max-width:768px){.play-button .play-icon{display:none}}.play-button:hover .play-icon{margin-left:0}.play-button:hover .play-text{display:inline}@media only screen and (min-width:769px){.play-button{position:absolute;color:#fff;right:90px;bottom:68px}.video{max-height:none!important;overflow:inherit}.video .ace-dialog-body{max-height:1000px!important;overflow-y:hidden!important}.video .dark-mask{width:100%;height:calc(100% - 50px);top:50px;padding-bottom:50px;display:flex;flex-direction:column;justify-content:center;align-items:center;position:absolute;z-index:3}.video .dark-mask .mask-image{width:70px;height:70px;cursor:pointer}.video .dark-mask .mask-text{margin-top:20px;font-size:14px;color:#181818}.gif-image{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);height:60px;width:200px;color:#fff;background:url(https://img.alicdn.com/tfs/TB13Kd_ToY1gK0jSZFCXXcwqXXa-420-71.gif);background-repeat:no-repeat;background-size:contain}video{width:100%;height:100%;object-fit:fill}}@media only screen and (max-width:768px){.play-button{position:relative!important}.ace-dialog-container{padding:0}.video{width:100%;min-height:158px!important;height:190px!important;margin:0;overflow:initial}.video .ace-dialog-body{padding:0;max-height:264px!important}.video video{width:100%;height:190px}.video .ace-dialog-close{z-index:2004;position:fixed;right:20px!important;top:46px!important}}.ace-drawer-box{position:relative;width:100%;height:524px;margin:0 0 32px;overflow:hidden;box-shadow:0 0 10px 0 #d6dcea}.ace-drawer-box-item{display:flex;flex-direction:column;position:absolute;z-index:2;top:0;left:0;height:100%;width:100%;background-color:#c0c3ca;box-shadow:-5px 0 10px 0 hsla(222,9%,77%,.5);transition:transform .3s cubic-bezier(1,0,0,1);transform:translateZ(0);overflow:hidden}.ace-drawer-box-item,.ace-drawer-box-item div{cursor:pointer}.ace-drawer-box-bg-content{position:relative;flex:1;overflow:hidden;background-color:#c0c3ca}.ace-drawer-box-bg{transition:opacity .3s,filter .3s;flex:1;opacity:.55;filter:brightness(1.2);height:418px;background-size:cover;background-position:0}.ace-drawer-box-header{display:flex;align-items:center;height:106px;background-color:#fff;overflow:hidden}.ace-drawer-box-no{transition:all .2s cubic-bezier(1,0,0,1);font-size:24px;color:#3d3d3d;text-align:center;flex-shrink:0;z-index:2;top:418px;left:0;width:80px;height:106px;line-height:106px}.ace-drawer-box-titleMain{font-size:20px;color:#181818;white-space:nowrap;line-height:24px}.ace-drawer-box-titleEn{font-size:12px;color:#181818;white-space:nowrap;opacity:.6;line-height:18px;margin-top:6px}.ace-drawer-box-desc{flex:10;font-size:14px;color:#646464;overflow:hidden;padding-left:44px;padding-right:10%;line-height:0;padding-top:2px}.ace-drawer-box-desc>div{display:-webkit-box;-webkit-line-clamp:2;overflow:hidden;text-overflow:ellipsis;line-height:23px;max-height:46px}.ace-drawer-box-link{display:inline-block;overflow:hidden;white-space:nowrap;margin-top:4px;line-height:23px;padding-right:15px;background:url(https://img.alicdn.com/tfs/TB1GCR7Thz1gK0jSZSgXXavwpXa-14-24.png) no-repeat 100%/7px 12px}.ace-drawer-box-link,.ace-drawer-box-link:active,.ace-drawer-box-link:hover,.ace-drawer-box-link:link,.ace-drawer-box-link:visited{text-decoration:none;cursor:pointer}.ace-drawer-box-link,.ace-drawer-box-link:link,.ace-drawer-box-link:visited{color:#ff6a00}.ace-drawer-box-link:hover{color:#ff791a}.ace-drawer-box-link:active{color:#f65f00}.ace-drawer-box-current,.ace-drawer-box-current div{cursor:default}.ace-drawer-box-current .ace-drawer-box-bg{opacity:1;filter:brightness(1)} /*! Animate.css - http://daneden.me/animate Licensed under the MIT license - http://opensource.org/licenses/MIT Copyright (c) 2013 Daniel Eden*/.animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}@keyframes bounce{0%,20%,53%,80%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{transition-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{transition-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{transform:translate3d(0,-4px,0)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes pulse{0%{transform:scaleX(1)}50%{transform:scale3d(1.05,1.05,1.05)}to{transform:scaleX(1)}}.pulse{animation-name:pulse}@keyframes rubberBand{0%{transform:scaleX(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleX(1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{0%,to{transform:translateZ(0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}to{transform:rotate(0deg)}}.swing{transform-origin:top center;animation-name:swing}@keyframes tada{0%{transform:scaleX(1)}10%,20%{transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{transform:scaleX(1)}}.tada{animation-name:tada}@keyframes wobble{0%{transform:none}15%{transform:translate3d(-25%,0,0) rotate(-5deg)}30%{transform:translate3d(20%,0,0) rotate(3deg)}45%{transform:translate3d(-15%,0,0) rotate(-3deg)}60%{transform:translate3d(10%,0,0) rotate(2deg)}75%{transform:translate3d(-5%,0,0) rotate(-1deg)}to{transform:none}}.wobble{animation-name:wobble}@keyframes bounceIn{0%,20%,40%,60%,80%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scaleX(1)}}.bounceIn{animation-name:bounceIn;animation-duration:.75s}@keyframes bounceInDown{0%,60%,75%,90%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{0%,60%,75%,90%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{0%,60%,75%,90%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{0%,60%,75%,90%,to{transition-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translateZ(0)}}.bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut;animation-duration:.75s}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{animation-name:fadeIn}@keyframes fadeInDown{0%{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{0%{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:none}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{0%{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:none}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{0%{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:none}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{0%{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:none}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{0%{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:none}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{0%{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{0%{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:none}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flip{0%{transform:perspective(400px) rotateY(-1turn);animation-timing-function:ease-out}40%{transform:perspective(400px) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(.95,.95,.95);animation-timing-function:ease-in}to{transform:perspective(400px);animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;animation-name:flip}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateX(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateX(10deg);opacity:1}80%{transform:perspective(400px) rotateX(-5deg)}to{transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInX}@keyframes flipInY{0%{transform:perspective(400px) rotateY(90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotateY(-20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotateY(10deg);opacity:1}80%{transform:perspective(400px) rotateY(-5deg)}to{transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInY}@keyframes flipOutX{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateX(-20deg);opacity:1}to{transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{animation-name:flipOutX;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipOutY{0%{transform:perspective(400px)}30%{transform:perspective(400px) rotateY(-15deg);opacity:1}to{transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipOutY;animation-duration:.75s}@keyframes lightSpeedIn{0%{transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{transform:skewX(20deg);opacity:1}80%{transform:skewX(-5deg);opacity:1}to{transform:none;opacity:1}}.lightSpeedIn{animation-name:lightSpeedIn;animation-timing-function:ease-out}@keyframes lightSpeedOut{0%{opacity:1}to{transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{animation-name:lightSpeedOut;animation-timing-function:ease-in}@keyframes rotateIn{0%{transform-origin:center;transform:rotate(-200deg);opacity:0}to{transform-origin:center;transform:none;opacity:1}}.rotateIn{animation-name:rotateIn}@keyframes rotateInDownLeft{0%{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInDownLeft{animation-name:rotateInDownLeft}@keyframes rotateInDownRight{0%{transform-origin:right bottom;transform:rotate(45deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInDownRight{animation-name:rotateInDownRight}@keyframes rotateInUpLeft{0%{transform-origin:left bottom;transform:rotate(45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInUpLeft{animation-name:rotateInUpLeft}@keyframes rotateInUpRight{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInUpRight{animation-name:rotateInUpRight}@keyframes rotateOut{0%{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate(200deg);opacity:0}}.rotateOut{animation-name:rotateOut}@keyframes rotateOutDownLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{animation-name:rotateOutDownLeft}@keyframes rotateOutDownRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{animation-name:rotateOutDownRight}@keyframes rotateOutUpLeft{0%{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{animation-name:rotateOutUpLeft}@keyframes rotateOutUpRight{0%{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate(90deg);opacity:0}}.rotateOutUpRight{animation-name:rotateOutUpRight}@keyframes hinge{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate(80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-name:hinge}@keyframes rollIn{0%{opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;transform:none}}.rollIn{animation-name:rollIn}@keyframes rollOut{0%{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{animation-name:rollOut}@keyframes zoomIn{0%{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{0%{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{animation-name:zoomOutDown}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{animation-name:zoomOutLeft}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{animation-name:zoomOutRight}@keyframes zoomOutUp{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{animation-name:zoomOutUp}.ace-hot-events-accordion{margin:0 auto;position:relative;z-index:1}.ace-hot-events-accordion .ace-hot-events-accordion-bg{position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;background-color:hsla(0,0%,100%,.2)}.ace-hot-events-accordion .ace-hot-events-accordion-content{width:1180px;margin:0 auto;position:relative;z-index:2;overflow:hidden}.ace-hot-events-ac-title{overflow:hidden}.ace-hot-events-ac-title h2,.ace-hot-events-ac-title h3{font-weight:400;line-height:30px;text-align:left}.ace-hot-events-ac-title>h2{font-size:32px;color:#333;margin:23px 0 22px}.ace-hot-events-ac-title>h3{font-size:22px;color:#ff6a00;margin:0 0 41px}@media only screen and (min-width:769px){.ace-hot-events-accordion{display:block}}@media only screen and (max-width:768px){.ace-hot-events-accordion{display:none}}@font-face{font-family:swiper-icons;src:url("data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA") format("woff");font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(-1 * var(--swiper-navigation-size)/ 2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:normal;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:"prev"}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:"next"}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#fff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:opacity .3s;transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:transform .2s,top .2s}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,left .2s}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,right .2s}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#fff}.swiper-pagination-black{--swiper-pagination-color:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{to{transform:rotate(1turn)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}@media only screen and (min-width:769px){.ace-hotevents{display:none}}@media only screen and (max-width:768px){.ace-hotevents{display:block;width:100%;height:725px!important;padding-top:39px;background:#fff}.ace-hotevents h2,.ace-hotevents h3,.ace-hotevents h4{font-weight:400;margin-bottom:0}.ace-hotevents h2{height:45px;font-size:32px;color:#ff6a00;letter-spacing:.36px;text-align:left;margin-left:20px}.ace-hotevents h3,.ace-hotevents h4{height:30px;margin-left:20px;font-size:18px;color:#333;letter-spacing:0;text-align:left;line-height:30px}.ace-hotevents h4{margin-bottom:40px}.ace-hotevents .swiper-container-mob{width:100%;overflow:hidden;margin-top:40px}.ace-hotevents .swiper-container-mob .swiper-pagination-bullets{bottom:40px}.ace-hotevents .swiper-container-mob .swiper-slide{height:400px;margin-top:40px;margin-bottom:67px;position:relative;display:flex;justify-content:center;transition:.5s}.ace-hotevents .swiper-container-mob .swiper-slide img{width:100%}.ace-hotevents .swiper-container-mob .swiper-slide .content{display:none;position:absolute;bottom:0;width:292px;height:112px;box-sizing:border-box;background:rgba(0,0,0,.6);padding:12px 20px 15px}.ace-hotevents .swiper-container-mob .swiper-slide .content .content-title{height:25px;font-size:18px;color:#fff;letter-spacing:1.01px;text-align:left;margin-bottom:10px}.ace-hotevents .swiper-container-mob .swiper-slide .content p{display:block;height:50px;width:252px;font-size:12px;color:#fff;letter-spacing:0;text-align:justify;line-height:17px;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:3}.ace-hotevents .swiper-container-mob .swiper-slide-active{width:292px!important;height:483px!important;margin-top:0!important;margin-bottom:24px!important}.ace-hotevents .swiper-container-mob .swiper-slide-active .content{display:block!important}.ace-hotevents .swiper-pagination{bottom:40px}.ace-hotevents .swiper-pagination-bullet{width:10px;height:10px}.ace-hotevents .my-bullet-active{background:#f60;opacity:1}.ace-hotevents .swiper-container-pc{display:none!important}.ace-hotevents .swiper-container-mob{display:block!important}}.componenet-wrap{background-color:transparent!important}.background-video{transform:translateZ(0)}.componenet-wrap{background-color:transparent!important}.dist-guest-view{position:relative}.dist-guest-view .dist-guest-bg{position:relative;z-index:2}.dist-guest-view h2,.dist-guest-view h4{overflow:hidden;white-space:nowrap;margin-bottom:0}.dist-guest-view h3{white-space:nowrap}.dist-guest-view h5{text-overflow:ellipsis;overflow:hidden;display:-webkit-box}.dist-guest-view .ant-spin-dot-item{background-color:#ff6a00}@media only screen and (min-width:769px){.dist-guest-mobile{display:none}.dist-guest-pc{width:100%}.dist-guest-pc-content{width:1180px;margin:0 auto}.dist-guest-pc-content .dist-guest-title-box{z-index:1;padding-top:56px;overflow:hidden}.dist-guest-pc-content .dist-guest-h2-index{margin:0 0 22px;font-weight:400;height:30px;font-size:32px;color:#333;letter-spacing:0;text-align:left;line-height:30px}.dist-guest-pc-content .dist-guest-h3-index{margin:0 0 40px;height:30px;font-size:22px;color:#ff6a00;letter-spacing:.25px;text-align:left;font-weight:400}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap{position:relative}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-next,.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-prev{font-family:sans-serif;position:absolute;top:50%;margin-top:-26px;z-index:1;display:block;width:20px;height:40px;text-align:center;line-height:40px;cursor:pointer;outline:none}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-next:after,.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-prev:after{display:none!important}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-prev{left:-45px;background:url(https://img.alicdn.com/tfs/TB17WGgThv1gK0jSZFFXXb0sXXa-42-80.png) no-repeat center 0;background-size:20px 40px}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-end,.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-next{right:-45px;background:url(https://img.alicdn.com/tfs/TB1Hk0_TeH2gK0jSZJnXXaT1FXa-42-80.png) no-repeat center 0;background-size:20px 40px}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-end{font-family:sans-serif;position:absolute;top:50%;margin-top:-26px;z-index:1;display:block;width:20px;height:40px;text-align:center;line-height:40px;cursor:pointer;outline:none}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-end:after{display:none!important}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-button-disabled{display:none}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest{user-select:none}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide{transition:all .5s ease;box-shadow:0 2px 10px 0 rgba(0,0,0,.1);height:375px;width:280px;position:relative}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide *{box-sizing:border-box}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide>img{height:100%;width:100%}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-img-bg{border:2px solid;border-image:linear-gradient(90deg,#fff,hsla(0,0%,86%,0)) 30 30 stretch;border-left-width:0;border-right-width:0;z-index:1;height:100px;width:280px;background-image:linear-gradient(-60deg,hsla(0,0%,100%,.1),hsla(0,0%,100%,.75) 88%);backdrop-filter:blur(5px);position:absolute;bottom:24px;left:0;right:0}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top{z-index:4;opacity:1;height:150px;width:280px;transition:bottom .5s ease;position:absolute;bottom:-145.7px;left:0;right:0;text-align:left}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top>div{margin-left:20px;height:1.1px;width:244.3px;opacity:.3;background:#fff;background-color:#fff}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top h3,.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top h4,.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top h5{font-weight:400}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top>h3{font-size:24px;color:#fff;letter-spacing:0;margin:17px 0 0 20px}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top>h4{height:22px;font-size:16px;color:#fff;letter-spacing:0;margin-left:20px;margin-bottom:0}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top .positionsCn-2{margin-bottom:24px}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top>h5{width:244px;font-size:12px;color:#fff;letter-spacing:0;margin:12px 20px}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-top-bg{z-index:3;background-image:linear-gradient(270deg,#ffa23e,#ff6b03);opacity:1;height:150px;width:280px;transition:bottom .5s ease;position:absolute;bottom:-145.7px;left:0;right:0}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-bottom{z-index:2;position:absolute;height:100px;width:280px;bottom:24px;left:0;right:0;text-align:left;padding:12px 0 12px 10px}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-bottom h3,.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-bottom h4,.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-bottom h5{font-weight:400}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-bottom>h3{height:33px;font-size:24px;color:#333;letter-spacing:0;margin-bottom:0}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide .dist-guest-hov-div-bottom>h4{height:22px;font-size:16px;color:#333;letter-spacing:0;margin-bottom:0}.dist-guest-pc-content .swiper-demo-container-dist-guest-wrap .swiper-demo-container-dist-guest .swiper-slide.no-data{width:1180px!important;display:flex;justify-content:center;align-items:center;font-size:18px;color:rgba(0,0,0,.25)}.dist-guest-pc-content-index{padding-bottom:72px}}@media only screen and (max-width:768px){.dist-guest-pc{display:none}.dist-guest-mobile-guest .dist-guest-mobile-h2-index,.dist-guest-mobile .dist-guest-mobile-h2-index{height:45px;font-size:32px;color:#ff6a00;letter-spacing:.36px;text-align:left;margin:0 5px 16px 20px;white-space:nowrap;font-weight:400}.dist-guest-mobile-guest .dist-guest-mobile-h3-index,.dist-guest-mobile .dist-guest-mobile-h3-index{height:30px;font-size:18px;color:#333;text-align:left;margin:0 0 40px 20px;font-weight:400}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest,.dist-guest-mobile .swiper-mobile-container-dist-guest{width:100%;padding-bottom:21px}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-wrapper,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-wrapper{align-items:center}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide{text-align:center;font-size:18px;background:#ccc;display:flex;width:80%;justify-content:center;align-items:center}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide *,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide *{box-sizing:border-box}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a{position:relative;display:block;width:100%;padding-bottom:134%}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a>img,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a>img{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img{z-index:3;position:absolute;bottom:0;left:0;right:0;padding:0 20px 17px;text-align:left}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img h3,.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img h4,.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img h5,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img h3,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img h4,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img h5{font-weight:400}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img>h3,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img>h3{height:25px;font-size:18px;color:#fff;margin-bottom:7px}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img>h4,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a>.dist-guest-mob-img>h4{height:17px;font-size:12px;color:#fff}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide>a .dist-guest-mob-img-bg,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide>a .dist-guest-mob-img-bg{z-index:2;background-image:linear-gradient(180deg,transparent,rgba(0,0,0,.1),#000);position:absolute;height:150px;bottom:0;left:0;right:0}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide .swiper-slide-shadow-left,.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .swiper-slide .swiper-slide-shadow-right,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide .swiper-slide-shadow-left,.dist-guest-mobile .swiper-mobile-container-dist-guest .swiper-slide .swiper-slide-shadow-right{display:none}.dist-guest-mobile-guest .swiper-mobile-container-dist-guest .no-data,.dist-guest-mobile .swiper-mobile-container-dist-guest .no-data{display:flex;justify-content:center;align-items:center;font-size:16px;color:rgba(0,0,0,.25);width:100%;height:375px}.dist-guest-mobile-index{padding-top:47px;padding-bottom:40px}}@font-face{font-family:swiper-icons;src:url("data:application/font-woff;charset=utf-8;base64, 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") format("woff");font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translateZ(0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(-1 * var(--swiper-navigation-size)/ 2);z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:normal;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:"prev"}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:"next"}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#fff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:opacity .3s;transform:translateZ(0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active,.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:100%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:transform .2s,top .2s}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,left .2s}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:transform .2s,right .2s}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#fff}.swiper-pagination-black{--swiper-pagination-color:#000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{to{transform:rotate(1turn)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0;width:100%;height:100%;background:#000;opacity:.6;filter:blur(50px);z-index:0}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}路径位置、文件夹、名称、图片等代码内都有请自行替换。
-
数据可视化大屏
作为大数据的学生,每次想实现前端数据可视化大屏就头疼,不会前端就很烦,所以这次特定不断调教AI,再加上自己不断的改改改,终于花了一个下午改成了一个还过得去的可视化大屏,所以直接把源码分享在这里了,但是要自己导入echarts组件。 index.html页面
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>电商数据可视化大屏</title> <script src="./StyleUtils/js/utils/echarts.min.js"></script> <script src="./StyleUtils/map/china.js"></script> <script src="./StyleUtils/js/utils/jQuery.js"></script> <link rel="stylesheet" href="style.css"> </head> <body> <div class="decoration decoration-1"></div> <div class="decoration decoration-2"></div> <div class="grid-line"></div> <div class="dashboard"> <div class="header"> <h1>电商数据智能分析平台</h1> <div id="timeDisplay"></div> </div> <!-- 第二行 --> <div class="card"> <div class="card-title"> <i>📊</i> 商品销售排行 </div> <div class="chart-container" id="barChart1"></div> </div> <div class="card"> <div class="card-title"> <i>📈</i> 核心数据指标 </div> <div class="stats-container"> <div class="stat-card"> <h3>今日销售额</h3> <div class="stat-value">¥ 1,248,560</div> <div class="stat-trend trend-up">↑ 12.5% 较昨日</div> </div> <!-- <div class="stat-card">--> <!-- <h3>订单完成量</h3>--> <!-- <div class="stat-value">24,856</div>--> <!-- <div class="stat-trend trend-up">↑ 8.3% 较昨日</div>--> <!-- </div>--> <!-- <div class="stat-card">--> <!-- <h3>用户访问量</h3>--> <!-- <div class="stat-value">186,423</div>--> <!-- <div class="stat-trend trend-down">↓ 3.2% 较昨日</div>--> <!-- </div>--> <!-- <div class="stat-card">--> <!-- <h3>转化率</h3>--> <!-- <div class="stat-value">13.4%</div>--> <!-- <div class="stat-trend trend-up">↑ 1.7% 较昨日</div>--> <!-- </div>--> </div> </div> <div class="card"> <div class="card-title"> <i>📊</i> 品类销售占比 </div> <div class="chart-container" id="barChart2"></div> </div> <!-- 第三行 --> <div class="card"> <div class="card-title"> <i>📈</i> 销售趋势分析 </div> <div class="chart-container" id="lineChart1"></div> </div> <div class="card map-container"> <div class="card-title"> <i>🗺️</i> 全国销售热力图 </div> <div class="chart-container" id="mapChart"></div> </div> <div class="card"> <div class="card-title"> <i>📈</i> 用户活跃趋势 </div> <div class="chart-container" id="lineChart2"></div> </div> <!-- 第四行 --> <div class="card"> <div class="card-title"> <i>🍰</i> 用户年龄分布 </div> <div class="chart-container" id="pieChart1"></div> </div> <div class="card"> <div class="card-title"> <i>🍰</i> 支付方式占比 </div> <div class="chart-container" id="pieChart2"></div> </div> <div class="footer"> <p>数据更新时间: 2023年11月15日 14:28:35 | © 2023 电商数据平台 版权所有</p> </div> </div> <script src="style.js"></script> </body> </html>index.css
* { margin: 0; padding: 0; box-sizing: border-box; font-family: 'Microsoft YaHei', sans-serif; } body { background: linear-gradient(135deg, #0f172a, #1e293b); color: #e2e8f0; min-height: 100vh; padding: 20px; overflow-x: hidden; } .dashboard { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: auto; gap: 20px; max-width: 1920px; margin: 0 auto; } .header { grid-column: 1 / span 3; background: rgba(15, 23, 42, 0.8); border-radius: 16px; padding: 20px; text-align: center; border: 1px solid rgba(100, 116, 139, 0.3); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.4); backdrop-filter: blur(10px); margin-bottom: 20px; } .header h1 { font-size: 2.8rem; margin-bottom: 10px; background: linear-gradient(90deg, #38bdf8, #818cf8); -webkit-background-clip: text; background-clip: text; color: transparent; letter-spacing: 2px; } .header p { font-size: 1.2rem; color: #94a3b8; max-width: 800px; margin: 0 auto; } .card { background: rgba(15, 23, 42, 0.7); border-radius: 16px; border: 1px solid rgba(100, 116, 139, 0.3); padding: 20px; box-shadow: 0 8px 20px rgba(0, 0, 0, 0.3); backdrop-filter: blur(10px); transition: transform 0.3s ease, box-shadow 0.3s ease; height: 100%; display: flex; flex-direction: column; } .card:hover { transform: translateY(-5px); box-shadow: 0 12px 25px rgba(0, 0, 0, 0.5); border-color: rgba(56, 189, 248, 0.5); } .card-title { font-size: 1.3rem; margin-bottom: 15px; color: #38bdf8; display: flex; align-items: center; gap: 10px; } .card-title i { font-size: 1.5rem; } .chart-container { flex: 1; min-height: 300px; } .stats-container { display: grid; grid-template-columns: 1fr; gap: 15px; } .stat-card { background: rgba(30, 41, 59, 0.6); border-radius: 12px; padding: 15px; display: flex; flex-direction: column; justify-content: center; border: 1px solid rgba(100, 116, 139, 0.2); } .stat-card h3 { font-size: 1rem; color: #94a3b8; margin-bottom: 8px; } .stat-value { font-size: 2rem; font-weight: bold; color: #38bdf8; } .stat-trend { display: flex; align-items: center; font-size: 0.9rem; margin-top: 5px; } .trend-up { color: #10b981; } .trend-down { color: #ef4444; } .map-container { grid-row: 3 / span 2; grid-column: 2; } .footer { grid-column: 1 / span 3; text-align: center; padding: 20px; font-size: 0.9rem; color: #64748b; margin-top: 20px; } /* 响应式调整 */ @media (max-width: 1200px) { .dashboard { grid-template-columns: 1fr 1fr; } .header, .footer { grid-column: 1 / span 2; } .map-container { grid-row: auto; grid-column: 1 / span 2; } } @media (max-width: 768px) { .dashboard { grid-template-columns: 1fr; } .header, .footer { grid-column: 1; } .map-container { grid-column: 1; } } /* 装饰元素 */ .decoration { position: absolute; z-index: -1; opacity: 0.1; } .decoration-1 { width: 400px; height: 400px; border-radius: 50%; background: linear-gradient(135deg, #38bdf8, #818cf8); top: -100px; right: -100px; } .decoration-2 { width: 300px; height: 300px; border-radius: 50%; background: linear-gradient(135deg, #8b5cf6, #ec4899); bottom: -100px; left: -100px; } .grid-line { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(to right, rgba(100, 116, 139, 0.05) 1px, transparent 1px), linear-gradient(to bottom, rgba(100, 116, 139, 0.05) 1px, transparent 1px); background-size: 40px 40px; z-index: -1; }index.js(我自己加了一个后端获取的通用方法,到时根据自己需求稍微改改代码就可以了,数据都是静态数据,后续有时间我就更新怎么从后端获取数据,然后进行数据显示)。
// 通用数据获取 async function fetchData(url, params = {}) { try { const response = await fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(params), }) if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } return await response.json(); } catch (error) { console.error(error); return null; } } // 初始化所有图表 document.addEventListener('DOMContentLoaded', function() { // 更新时间显示 function updateTime() { const now = new Date(); const timeDisplay = document.getElementById('timeDisplay'); const options = { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false }; timeDisplay.textContent = now.toLocaleDateString('zh-CN', options); } // 初始化时间并设置定时器 updateTime(); setInterval(updateTime, 1000); function initOption() { bar1() bar2() line1() line2() pie1() pie2() map() } // 商品销售排行 function bar1() { const barChart1 = echarts.init(document.getElementById('barChart1')); const option = { tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', top: '15%', containLabel: true }, xAxis: { type: 'category', data: ['智能手机', '笔记本电脑', '智能手表', '蓝牙耳机', '平板电脑', '相机', '游戏主机'], axisLine: { lineStyle: { color: '#64748b' } } }, yAxis: { type: 'value', name: '销售额 (万元)', nameTextStyle: { color: '#94a3b8' }, axisLine: { lineStyle: { color: '#64748b' } }, splitLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.2)' } } }, series: [{ name: '销售额', type: 'bar', data: [125, 98, 76, 65, 58, 42, 35], itemStyle: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: '#38bdf8' }, { offset: 1, color: '#0ea5e9' } ]) }, label: { show: true, position: 'top', color: '#e2e8f0' } }] }; barChart1.setOption(option); } // 品类销售占比 function bar2() { const barChart2 = echarts.init(document.getElementById('barChart2')); const option = { tooltip: { trigger: 'axis', axisPointer: { type: 'shadow' } }, grid: { left: '3%', right: '4%', bottom: '3%', top: '15%', containLabel: true }, xAxis: { type: 'value', axisLine: { lineStyle: { color: '#64748b' } }, splitLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.2)' } } }, yAxis: { type: 'category', data: ['数码电子', '家用电器', '服装鞋帽', '美妆护肤', '食品生鲜', '家居用品', '图书文具'], axisLine: { lineStyle: { color: '#64748b' } } }, series: [{ name: '占比', type: 'bar', data: [35, 28, 22, 18, 15, 12, 8], itemStyle: { color: new echarts.graphic.LinearGradient(1, 0, 0, 0, [ { offset: 0, color: '#818cf8' }, { offset: 1, color: '#6366f1' } ]) }, label: { show: true, position: 'right', color: '#e2e8f0' } }] } barChart2.setOption(option); } // 销售趋势分析 function line1() { const lineChart1 = echarts.init(document.getElementById('lineChart1')); const option = { tooltip: { trigger: 'axis' }, legend: { data: ['销售额', '订单量'], textStyle: { color: '#94a3b8' }, right: 10, top: 0 }, grid: { left: '3%', right: '4%', bottom: '3%', top: '20%', containLabel: true }, xAxis: { type: 'category', boundaryGap: false, data: ['11/09', '11/10', '11/11', '11/12', '11/13', '11/14', '11/15'], axisLine: { lineStyle: { color: '#64748b' } } }, yAxis: { type: 'value', name: '销售额 (万元)', nameTextStyle: { color: '#94a3b8' }, axisLine: { lineStyle: { color: '#64748b' } }, splitLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.2)' } } }, series: [ { name: '销售额', type: 'line', data: [820, 932, 1560, 1434, 1290, 1030, 1248], smooth: true, lineStyle: { width: 3, color: '#38bdf8' }, symbol: 'circle', symbolSize: 8, itemStyle: { color: '#38bdf8' }, areaStyle: { color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { offset: 0, color: 'rgba(56, 189, 248, 0.5)' }, { offset: 1, color: 'rgba(56, 189, 248, 0.1)' } ]) } }, { name: '订单量', type: 'line', yAxisIndex: 0, data: [18.2, 19.5, 32.4, 28.6, 25.3, 20.8, 24.8], smooth: true, lineStyle: { width: 3, color: '#8b5cf6' }, symbol: 'circle', symbolSize: 8, itemStyle: { color: '#8b5cf6' } } ] } lineChart1.setOption(option); } // 用户活跃趋势 function line2() { const lineChart2 = echarts.init(document.getElementById('lineChart2')); const option = { tooltip: { trigger: 'axis' }, legend: { data: ['活跃用户', '新增用户'], textStyle: { color: '#94a3b8' }, right: 10, top: 0 }, grid: { left: '3%', right: '4%', bottom: '3%', top: '20%', containLabel: true }, xAxis: { type: 'category', boundaryGap: false, data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'], axisLine: { lineStyle: { color: '#64748b' } } }, yAxis: { type: 'value', name: '用户量 (万)', nameTextStyle: { color: '#94a3b8' }, axisLine: { lineStyle: { color: '#64748b' } }, splitLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.2)' } } }, series: [ { name: '活跃用户', type: 'line', data: [132, 145, 158, 142, 168, 185, 162], smooth: true, lineStyle: { width: 3, color: '#10b981' }, symbol: 'circle', symbolSize: 8, itemStyle: { color: '#10b981' } }, { name: '新增用户', type: 'line', data: [28, 32, 36, 31, 35, 42, 38], smooth: true, lineStyle: { width: 3, color: '#f59e0b' }, symbol: 'circle', symbolSize: 8, itemStyle: { color: '#f59e0b' } } ] } lineChart2.setOption(option); } // 用户年龄分布 function pie1() { const pieChart1 = echarts.init(document.getElementById('pieChart1')); const option = { tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)' }, legend: { orient: 'vertical', right: 10, top: 'center', textStyle: { color: '#94a3b8' } }, series: [ { name: '年龄分布', type: 'pie', radius: ['40%', '70%'], center: ['40%', '50%'], avoidLabelOverlap: false, itemStyle: { borderRadius: 10, borderColor: '#0f172a', borderWidth: 2 }, label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '18', fontWeight: 'bold' } }, labelLine: { show: false }, data: [ { value: 28, name: '18岁以下', itemStyle: { color: '#38bdf8' } }, { value: 145, name: '18-25岁', itemStyle: { color: '#818cf8' } }, { value: 235, name: '26-35岁', itemStyle: { color: '#8b5cf6' } }, { value: 187, name: '36-45岁', itemStyle: { color: '#ec4899' } }, { value: 95, name: '46-60岁', itemStyle: { color: '#f59e0b' } }, { value: 42, name: '60岁以上', itemStyle: { color: '#10b981' } } ] } ] } pieChart1.setOption(option); } // 支付方式占比 function pie2() { const pieChart2 = echarts.init(document.getElementById('pieChart2')); const option = { tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)' }, series: [ { name: '支付方式', type: 'pie', radius: '70%', center: ['50%', '50%'], roseType: 'radius', itemStyle: { borderRadius: 5, borderColor: '#0f172a', borderWidth: 2 }, label: { color: '#e2e8f0' }, data: [ { value: 45, name: '支付宝', itemStyle: { color: '#1677ff' } }, { value: 30, name: '微信支付', itemStyle: { color: '#07c160' } }, { value: 15, name: '银行卡', itemStyle: { color: '#0ea5e9' } }, { value: 8, name: '云闪付', itemStyle: { color: '#eb2f96' } }, { value: 2, name: '其他方式', itemStyle: { color: '#f59e0b' } } ] } ] } pieChart2.setOption(option); } // 随机数 function randomData() { return Math.round(Math.random() * 500); } // 全国销售热力图 function map() { const mapChart = echarts.init(document.getElementById('mapChart')); const mydata = [ {name: '北京',value: randomData() },{name: '天津',value: randomData() }, {name: '上海',value: randomData() },{name: '重庆',value: randomData() }, {name: '河北',value: randomData() },{name: '河南',value: randomData() }, {name: '云南',value: randomData() },{name: '辽宁',value: randomData() }, {name: '黑龙江',value: randomData() },{name: '湖南',value: randomData()}, {name: '安徽',value: randomData() },{name: '山东',value: randomData() }, {name: '新疆',value: randomData() },{name: '江苏',value: randomData() }, {name: '浙江',value: randomData() },{name: '江西',value: randomData() }, {name: '湖北',value: randomData() },{name: '广西',value: randomData() }, {name: '甘肃',value: randomData() },{name: '山西',value: randomData() }, {name: '内蒙古',value: randomData() },{name: '陕西',value: randomData()}, {name: '吉林',value: randomData() },{name: '福建',value: randomData() }, {name: '贵州',value: randomData() },{name: '广东',value: randomData() }, {name: '青海',value: randomData() },{name: '西藏',value: randomData() }, {name: '四川',value: randomData() },{name: '宁夏',value: randomData() }, {name: '海南',value: randomData() },{name: '台湾',value: randomData() }, {name: '香港',value: randomData() },{name: '澳门',value: randomData() } ]; const option = { //backgroundColor: '#FFFFFF', // 标题 title: { text: '各省份的总成交量对比', textStyle:{color:'#fff'}, //subtext: '纯属虚构', x:'center', show: true }, // 提示框 tooltip : { trigger: 'item' }, visualMap: { show : true, x: 'left', y: 'bottom', //layoutCenter:['30%','30%'], splitList: [ {start: 500, end:600},{start: 400, end: 500}, {start: 300, end: 400},{start: 200, end: 300}, {start: 100, end: 200},{start: 0, end: 100}, ], // color: ['#ff0', '#ffff00', '#0E94EB','#6FBCF0', '#F0F06F', '#00CC00'] color:['#5bc2e7', '#6980c5', '#70dfdf', '#f7f1ee', '#3390FF'] }, series: [{ name: '各省份的总成交量对比', type: 'map', mapType: 'china', label: { normal: { show: false }, emphasis: { show: false } }, data:mydata }] }; mapChart.setOption(option); } initOption() // 响应式调整 window.addEventListener('resize', function() { bar1.resize(); bar2.resize(); line1.resize(); mapChart.resize(); lineChart2.resize(); pieChart1.resize(); pieChart2.resize(); }); });效果图


-
html制作悬浮图标可以拖拽

<div style="display: inline;z-index:20" @click="showMessage" v-if="rightFlags.shareRight"> <img :src="require('@/assets/monitor/send.png')" style="width: 60px;position: fixed;" :style="{ bottom: sendPageInfo.bottom + 'px', right: sendPageInfo.right + 'px', cursor: sendPageInfo.active ? 'move' : 'pointer' }" @mousedown.stop="startDragging" @mouseup.stop="stopDragging" @mousemove.stop="dragging" @touchstart="startDragging" @touchend="stopDragging" @touchmove="dragging" id="imgdraggable"> </div>PC端的话可以使用 mouseXXXX系列,平板手机的话可以使用 touchXXX系列。
let agent = window.navigator.userAgent.toLowerCase(); if (["android", "iphone", "symbianos", "windows phone", "ipad", "ipod"].some(i => agent.indexOf(i) > 0)) { this.sendPageInfo.isPhone = true; } else { this.sendPageInfo.isPhone = false; }拖拽代码
dragging(e) { if (this.sendPageInfo.active) { e.preventDefault(); this.sendPageInfo.hasDrag = true; if (this.sendPageInfo.isPhone) { this.sendPageInfo.posX = e.touches[0].clientX - this.sendPageInfo.offsetX; this.sendPageInfo.posY = e.touches[0].clientY - this.sendPageInfo.offsetY; this.sendPageInfo.bottom = this.clientHeight - this.sendPageInfo.posY this.sendPageInfo.right = this.clientWidth - this.sendPageInfo.posX } else { this.sendPageInfo.posX = e.clientX - this.sendPageInfo.offsetX; this.sendPageInfo.posY = e.clientY - this.sendPageInfo.offsetY; this.sendPageInfo.bottom = this.clientHeight - this.sendPageInfo.posY this.sendPageInfo.right = this.clientWidth - this.sendPageInfo.posX } } }, startDragging(e) { this.sendPageInfo.active = true; if (this.sendPageInfo.isPhone) { this.sendPageInfo.posX = this.clientWidth - this.sendPageInfo.right this.sendPageInfo.posY = this.clientHeight - this.sendPageInfo.bottom this.sendPageInfo.offsetX = e.touches[0].clientX - this.sendPageInfo.posX; this.sendPageInfo.offsetY = e.touches[0].clientY - this.sendPageInfo.posY; } else { window.addEventListener('mousemove', this.dragging) this.sendPageInfo.posX = this.clientWidth - this.sendPageInfo.right this.sendPageInfo.posY = this.clientHeight - this.sendPageInfo.bottom this.sendPageInfo.offsetX = e.clientX - this.sendPageInfo.posX; this.sendPageInfo.offsetY = e.clientY - this.sendPageInfo.posY; } }, stopDragging(e) { this.sendPageInfo.active = false; if (this.sendPageInfo.isPhone) this.sendPageInfo.hasDrag = false; }, showMessage() { if (this.sendPageInfo.hasDrag) { this.sendPageInfo.hasDrag = false; } else { this.showSendPersonFlag = true; } },hasDrag 是PC端的时候拖拽和点击会有冲突,所以用这个当一个阻止标识。
