
博客
-
如何用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, 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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}@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开发神器!极摩客EVO-X2桌面Mini AI工作站深度评测
今年初的CES上,AMD发布了专门针对AI PC领域的高算力移动平台——AMD锐龙AI Max+,这一系列处理器基于AMD Zen5架构设计,最大亮点是集成多达40个RDNA3.5架构的图形计算单元,并且提供了高达256GB/s的超高带宽内存接口,同时还集成了50TOPS算力的XDNA2架构NPU。
了解AI的朋友都知道,当前AI应用硬件层面的主要瓶颈就在于GPU与内存,无论是Stable Diffusion的文生图、图生图、文生视频等应用,还是围绕各种大模型的智能体类应用,只要涉及到本地化部署和使用,主要瓶颈就是GPU和内存。锐龙AI Max+就瞄准了这两大痛点,通过高算力图形计算单元以及高容量、高带宽内存方案,让AI PC、迷你电脑也具备了堪比台式机的AI算力水平。因此,锐龙AI Max+平台堪称当前性能最强、AI算力最为彪悍的移动级处理器。
今天我们拿到的是搭载AMD锐龙AI Max+ 395处理器的极摩客EVO-X2迷你电脑,它的定位是”Mini AI工作站”。

作为当前少数搭载AMD锐龙AI Max+ 395处理器的迷你电脑,极摩客EVO-X2桌面AI超算中心在AI应用方面究竟会有怎样的表现?通过本篇评测,我们来一探究竟。
·硬件配置与性能表现
首先我们看看这款机器的配置与性能表现。
极摩客EVO-X2桌面AI超算中心搭载的AMD锐龙AI Max+ 395处理器,是锐龙AI Max+系列的顶配型号,原生16颗超大核心32线程设计,最高加速频率5.1GHz,总缓存高达80MB,NPU峰值AI算力为50TOPS,cTDP为45-120W,集成40个图形核心的Radeon 8060S iGPU。

【CPU单核/多核性能】
参考CINEBENCH R23和2024测试,锐龙AI Max+ 395处理器在R23测试标准下,单核得分1985,多核得分36648;2024标准下单核得分113,多核得分1752,整体性能表现非常出色,甚至可以探到移动端HX级别处理器的性能水准。因此锐龙AI Max+ 395并非”AI偏科生”,而是有着极其扎实的单核和多核性能实力。

【CPU功耗释放】
得益于极摩客EVO-X2桌面AI超算中心较大体积带来的内部空间,AIDA 64 FPU CPU单烤机实测这颗处理器的长时稳定功耗释放可以保持在103W附近,平均核心温度99.1℃,3分钟以内的短时功耗释放甚至可以达到120W。

【内存读写性能】
锐龙AI Max+ 395在设计时针对AI应用角度的这种特性,大幅提升了内存带宽,所以AIDA 64内存性能测试的结果极为出色。这款机器配备的双通道128GB LPDDR5x 8000高速内存读取速度高达119.34GB/s,写入速度高达210.1GB/s,拷贝速度高达153.49GB/s,速度极快。

【硬盘读写性能】
存储方面,极摩客EVO-X2桌面AI超算中心一步到位配备了2TB容量的雷克沙PCIe 4.0固态硬盘,实测顺序读取速度为7116.8MB/s,顺序写入速度为6440.38MB/s,4K随机读取速度为69.5MB/s,4K随机写入速度为207.96MB/s,达到了PCIe 4.0固态硬盘的高端性能水准。这非常有助于大参数量大语言模型的载入速度。

【GPU图形性能】
锐龙AI Max+ 395之所以能够胜任大参数量AI大模型的需求,很重要的原因在于它集成的Radeon 8060S iGPU,这颗GPU在集成显卡中可以说是超模的存在。它拥有2560个流处理器,6GB LPDDR5显存,128GB/s显存带宽,核心频率高达2900MHz,显存频率1000MHz,比当前任何一款集成显卡的性能都要强很多。

参考3DMark各项测试可以看到,Radeon 8060S iGPU在Speed Way DX12性能方面得分达到了2025,远超其它iGPU性能。Port Royal光追性能达到了5884分,基本达到了RTX 4060独显的水平(5957分左右)。而Time Spy以及Fire Strike图形分也分别达到了11498和30713分,作为集成显卡,它的理论图形性能其实达到甚至超越了RTX 4060独显的水平,着实让人感到惊艳。




·综合应用性能评估
CPU、内存、硬盘、GPU理论性能了解之后,我们来看看如此出色的综合性能能够在实际应用中获得怎样的体验?
【CPU应用性能】
首先是CPU相关的应用性能表现。
7-Zip压缩与解压缩测试中,锐龙AI Max+ 395处理器得益于16颗超大核心32线程设计,压缩速度达到了150617KB/s,解压缩速度达到了2063057KB/s,总评分高达177.76GIPS,是目前移动级处理器中T0级别的性能水准。

视频编码方面,x264 Benchmark实测编码2500帧的帧速率为77.31fps,完成时间为32秒,相对于HX系列的处理器要略慢一些。
渲染方面,V-Ray Bencmark 1分钟采样率达到38813 vsamples;Corona Benchmark渲染速度达到了11248700Rays/sec,渲染用时仅43秒。


总体来说,锐龙AI Max+ 395处理器在压缩、解压缩以及物理渲染方面有着远高于其它移动端处理器的性能表现,而视频编码能力满足生产力需求也是不成问题的。
【GPU应用性能】
接下来再看看GPU相关的应用性能。
首先是V-Ray Benchmark的加速测试,1分钟渲染速度达到了1812 vpaths,在集成显卡中鹤立鸡群。
Blender benchmark的表现同样出色,monster、junkshop、classroom三项渲染采样率分别达到560.23、199.86以及252.34 samples/min,同样远超当前其它集成显卡的性能。

综合应用性能】
最后看看综合应用性能。
生产力理论性能我们参考PCMark 10办公模式测试:常用基本功能,包含Web浏览、视频会议、应用程序启动等得分为11425分,说明其完成这些基础办公任务没有任何问题;生产力项目测试中得分高达10717分,表明其拥有卓越的电子表格、文档工作性能;数位内容创作评分高达16366分,说明其能够非常高效地完成图片、视频编辑、图形渲染等工作;综合得分9039,应对日常办公、娱乐应用没有任何问题。
生产力应用性能我们参考UL Procyon的照片编辑和视频编辑测试,二者评分分别达到了8955和22765分,可以相当轻松地胜任RAW格式原片处理,并且在2K、4K视频剪辑上也能提供极为出色的性能支持。


AI性能评估
搭载AMD锐龙AI Max+ 395处理器的极摩客EVO-X2售价为14999元,对于大众用户这个价格不便宜,但是如果将它与动辄数万、数十万元的AI一体机来做对比的话,这款机器可以说是目前成本相当低的AI学习、开发、应用平台,对初步上手AI的人群来说非常适合。
了解AI的朋友都知道,显存和内存在AI应用中非常重要,Radeon 8060S虽然图形性能极为出色,但其显存也不过就是6GB,应对AI大语言模型的应用需求有点捉襟见肘。不过通过AMD独特的统一内存技术,在AMD软件控制中心,我们可以将极摩客EVO-X2的128GB内存分配给集成显卡作显存,最高可以分配96GB,这样就可以承担起大参数量大语言模型的应用需求了。


理论性能了解之后,我们看看锐龙AI Max+ 395在实际AI应用中的表现。
首先通过UL Procyon测试了Phi-3.5 4B、Mistral 7B、Llama 3.1 8B以及Llama 2 13B四款经典大语言模型,生成速度分别达到了69.56 tokens/s、44.87 tokens/s、38.01 tokens/s以及25.45 tokens/s,速度非常快。另外值得一提的是,即便是RTX 5060笔记本电脑GPU,因为其作为独立显卡也只有可怜的8GB显存,所以也无法正常运行参数量较大的Llama 2大模型,而Radeon 8060S不仅成功运行,且生成速度能够达到25.45 tokens/s,日常应用完全没有问题。此时,锐龙AI Max+ 395平台的独特优势就彻底显现出来了。


首先在各类小参数量稠密大模型测试中可以看到,锐龙AI Max+ 395表现非常出色,凭借内存分配带来的超大显存支持,即便是遇到BF16高精度的Mistral-small 24B以及Gemma 2 27B大模型,生成速度也分别达到了12.37 tokens/s和11.62 tokens/s,表现出色。而对于更高性能的DeepSeek R1 14B、Phi-4 15B,速度也能达到19.63 tokens/s和12.24 tokens/s;低精度的DeepSeek R1 7B生成速度更是达到了41.94 tokens/s,而DeepSeek R1 1.5B则达到了92.67 tokens/s,可见在面对小参数量大模型时,锐龙AI Max+ 395无论是面对高精度模型还是低精度模型,都能提供足够快的生成速度。

另外这里要说明的一点是,Qwen3-235B-A22B-IQ2_S这个模型虽然参数量达到了235B,但它并非是常见的稠密模型,而是MoE(Mixtureofexperts)混合专家模型。简单来说,MoE模型虽然总参数量很大,但以Qwen3-235B-A22B-IQ2_S模型为例,它虽然拥有235B总参数量,但运行时实际只会调用22B(模型中A22B标识就表示运行时只会调用22B参数量)的参数进行计算,因此对于硬件的压力要小很多。
也正是因为有着这种大参数、低算力特性,MoE模型或许会成为未来大模型发展的主流趋势。
反之,稠密模型每一次计算都会调用所有参数,这也就是为什么235B的Qwen3-235B-A22B-IQ2_S生成速度反而比DeepSeek R1 32B、QWQ 32B大模型要快的原因。
AI测试的最后一部分,我们使用了针对AMD锐龙平台打造的Amuse这款Stable Diffusion工具,它支持文生图、图生图、文生视频等应用,使用起来非常方便。
锐龙AI Max+ 395集成的Radeon 8060S本身拥有相当不错的图形性能,因此对于游戏玩家来说也是不错的选择。所以性能测试的最后一部分,我们进行了四款热门游戏的测试。
《三角洲行动》,极高画质(次高画质),2560×1600分辨率,平均帧率可以达到96fps,流畅运行无压力。
《荒野大镖客2》,中等画质,2560×1600分辨率,开启FSR,平均帧率可以达到89fps,运行非常流畅。
《赛博朋克2077》,超级画质,未开启光追,2560×1600分辨率,平均帧率可以达到59.23fps,接近60fps的表现已经远超当前其它集成显卡了。
《黑神话:悟空》,超高画质(非影视级画质),2560×1600分辨率,平均帧率达到了62fps,可以流畅游玩。
可见极摩客EVO-X2不仅拥有出色的AI性能,同时还有着不错的游戏性能,再加上出色的生产力性能,这款产品可以说是相当能打的一款综合性迷你主机了。而且确实不负”桌面AI超算中心”之名!



简约干练的外观设计
作为一款较大体积的迷你电脑,极摩客EVO-X2桌面AI超算中心在设计上还是很有看点的。这款机器整体采用了类似”夹心饼干”的设计方式,顶部和底部采用银色金属面板打造,中间采用黑色配色,从外观配色上就给人一种很极客的感觉。

这款机器的设计风格简约,卧放时正面的切角区域印有”GMKtec”的品牌LOGO,五边形切角设计打破了正方形机身”循规蹈矩”的感觉。正如其独特的配置一样,仿佛彰显着不拘一格、打破壁垒的产品语言。

这款机器支持卧放和立放,可以适应不同尺寸的办公空间。另外可以看到切角对应的区域设计有一枚三角形按键,它的作用是一键切换风扇的灯效模式。可以很方便的在常亮、呼吸等灯效模式中快速切换。极摩客EVO-X2桌面AI超算中心有着非常出色的接口扩展能力,机身前端配有电源键和P-Mode性能模式切换快捷键。同时还配有标准的SD卡插槽,1个USB4接口,2个USB 3.2 Type-A接口以及3.5mm耳麦插孔。机身背部接口就更加丰富了。包括安全锁孔,电源插孔,3.5mm耳麦插孔,RJ45以太网口,1个USB 3.2 Gen 2 Type-A接口,1个USB4接口,1个DP1.4视频端口,1个HDMI2.1视频端口以及2个USB2.0接口。另外可以看到在接口区域下方,还设计有四个散热格栅。同时机身底部面板也开有大面积的散热孔,整体散热效率得到保障。




·评测总结年初我在CES参加AMD发布会时,就对锐龙AI Max+ 395产生了极大兴趣。因为在整个行业里,锐龙AI Max+是颇为独特的存在,它从CPU的角度赋予了AI PC更加确切的定义,让移动端的AI处理器与传统移动端处理器产生了区隔。不过说实话,当时对于锐龙AI Max+的实际表现还是颇有疑问的,毕竟集成显卡跑出超越独立显卡的AI性能,在年初还是一件相当魔幻的事情。
不过在这次对锐龙AI Max+ 395处理器和极摩客EVO-X2桌面AI超算Mini工作站的深入测试中,此前的疑虑被彻底打破。MoE混合专家模型的出现,或许是未来锐龙AI Max+ 395这类处理器切入大参数量模型本地部署和应用的主要方式,而且实际效果真心不错。
此外,锐龙AI Max+ 395有着非常不错的生产力性能和游戏性能,对于迷你电脑、笔记本电脑来说也是相当靠谱的硬件解决方案。
而对于极摩客EVO-X2桌面AI超算中心这款产品来说,笔者个人认为它非常适合正在学习AI、研究AI、或者本地部署使用AI的工作室、小型企业用户选择,算得上是当前极低成本的高算力AI解决方案了。
-
体重计算器 HTML
<在HTML中创建体重计算器,你可以使用HTML表单(form)和JavaScript来收集用户输入并计算体重。下面是一个简单的示例,展示了如何创建一个基本的体重计算器。
HTML部分
首先,你需要创建一个HTML文件,并添加一个表单和一些输入字段,例如身高和体重(这里我们使用BMI(Body Mass Index,身体质量指数)作为示例)。
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>体重计算器</title> <script src="calculator.js"></script> <!-- 引入JavaScript文件 --> </head> <body> <h2>体重计算器</h2> <form id="weightCalculator"> <label for="height">身高 (cm):</label> <input type="number" id="height" name="height" required><br><br> <label for="weight">体重 (kg):</label> <input type="number" id="weight" name="weight" required><br><br> <button type="button" onclick="calculateBMI()">计算BMI</button> </form> <p>您的BMI是:<span id="bmiResult">--</span></p> </body> </html>JavaScript部分
接下来,创建一个名为
calculator.js的JavaScript文件,并添加以下代码来处理BMI的计算。function calculateBMI() { var height = document.getElementById('height').value; // 获取身高输入值 var weight = document.getElementById('weight').value; // 获取体重输入值 var bmi; if (height === "" || weight === "") { alert("请填写所有字段!"); return; // 如果没有填写完整,则不进行计算并返回 } // 计算BMI值 bmi = weight / ((height / 100) * (height / 100)); document.getElementById('bmiResult').textContent = bmi.toFixed(2); // 显示结果,保留两位小数 }解释
- HTML部分:表单包含两个输入字段,分别用于输入身高(厘米)和体重(千克)。还有一个按钮,当点击时调用
calculateBMI()函数。结果显示在<p>标签内。 - JavaScript部分:
calculateBMI()函数首先获取用户输入的身高和体重值。然后,它计算BMI值,并将其显示在页面上。如果任何输入字段为空,则显示一个警告消息。
确保将
calculator.js文件放在与HTML文件相同的目录中,或者根据需要调整<script>标签中的src属性。这样,当用户填写完表单并点击“计算BMI”按钮时,页面上就会显示计算出的BMI值。ps:仅供参考。
- HTML部分:表单包含两个输入字段,分别用于输入身高(厘米)和体重(千克)。还有一个按钮,当点击时调用
-
HTML 简易计算器

<!DOCTYPE html> <html> <head> <meta charset=utf-8/> <title>Calculator</title> <style id="jsbin-css"> div, span { margin: 0; padding: 0; font-weight: bold; font: bold 16px Arial, sans-serif; /*禁止选中文本*/ -moz-user-select: none; -webkit-user-select: none; -o-user-select: none; user-select: none; } body { background: radial-gradient(circle, #fff, #aaa); background: -webkit-radial-gradient(circle, #fff, #aaa); background: -o-radial-gradient(circle, #fff, #aaa); background: -moz-radial-gradient(circle, #fff, #aaa); background-size: cover; } #calculator { width: 325px; height: auto; margin: 100px auto; padding: 20px; background: linear-gradient(#9dd2ea, #8bceec); background: -o-linear-gradient(#9dd2ea, #8bceec); background: -webkit-linear-gradient(#9dd2ea, #8bceec); background: -moz-linear-gradient(#9dd2ea, #8bceec); border-radius: 5px; box-shadow: 0 7px 8px #0000ff } .keys, .head { overflow: hidden; } .keys span, .clear { float: left; width: 66px; height: 40px; margin: 0 5px 10px 8px; text-align: center; line-height: 40px; border-radius: 3px; background: #eee; box-shadow: 0 5px 1px #999; cursor: pointer; transition: all 0.3s ease; } .keys span:hover { background: #87cefa; box-shadow: 0 5px 1px #1e90ff; color: #fff; } .keys .sign { background: #fffacd; } .clear { float: left; background: #ffb6c1; box-shadow: 0 5px 1px #ff86c1; } .clear:hover { background: #ff96a1; box-shadow: 0 5px 1px #ff4691; color: #fff; } .show { width: 213px; height: 40px; float: right; margin: 0 16px 5px 0; border-radius: 3px; background: #999; font-size: 20px; line-height: 40px; text-align: right; padding-right: 10px; box-shadow: inset 0 4px 5px #333; } </style> </head> <body> <div id="calculator"> <div class="head"> <span class="clear">c</span> <div class="show"></div> </div> <div class="keys"> <span>7</span> <span>8</span> <span>9</span> <span class="sign">+</span> <span>4</span> <span>5</span> <span>6</span> <span class="sign">-</span> <span>1</span> <span>2</span> <span>3</span> <span class="sign">*</span> <span>0</span> <span>.</span> <span>=</span> <span class="sign">/</span> </div> </div> <script> window.onload = function () { var oShow = getByClass("calculator", "show")[0]; var aNum = document.getElementById("calculator").getElementsByTagName("span"); for (var i = 0, iLen = aNum.length; i < iLen; i++) { aNum[i].onclick = function () { var oShowVal = oShow.innerHTML; var oNumVal = this.innerHTML; var num1, num2 = null; num1 = oShowVal; //判断按键 if (oNumVal == "c") { oShow.innerHTML = ""; } else if (oNumVal == "=") { var oResult = eval(oShowVal); console.log(oResult); oShow.innerHTML = oResult==undefined?'0':oResult; } else { oShow.innerHTML += oNumVal; } } } }; function getByClass(root, sClass) { var obj = document.getElementById(root); var arr = []; var aItems = obj.getElementsByTagName("*"); for (var i = 0; i < aItems.length; i++) { if (aItems[i].className == sClass) { arr.push(aItems[i]); } } return arr; } </script> </body> </html> -
数据可视化大屏
作为大数据的学生,每次想实现前端数据可视化大屏就头疼,不会前端就很烦,所以这次特定不断调教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端的时候拖拽和点击会有冲突,所以用这个当一个阻止标识。
