用html写一个有趣的鬼魂动画

在这里插入图片描述

<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
  <title>一个有趣的鬼魂动画</title>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel="stylesheet" href="./style.css">

</head>
<body>
<div class="scene-container stars-out" tabindex="1">
  <div class="ghost-container">
    <div class="ghost">
      <!-- 鬼魂的头部、眼睛、嘴、腮红 -->
      <div class="ghost-head">
        <div class="ghost-face">
          <div class="eyes-row">
            <div class="eye left"></div>
            <div class="eye right"></div>
          </div>
          <div class="mouth-row">
            <div class="cheek left"></div>
            <div class="mouth">
              <div class="mouth-top"></div>
              <div class="mouth-bottom"></div>
            </div>
            <div class="cheek right"></div>
          </div>
        </div>
      </div>

      <!-- 鬼魂的身体 -->
      <div class="ghost-body">
        <div class="ghost-hand hand-left"></div>
        <div class="ghost-hand hand-right"></div>
        <div class="ghost-skirt">
          <div class="pleat down"></div>
          <div class="pleat up"></div>
          <div class="pleat down"></div>
          <div class="pleat up"></div>
          <div class="pleat down"></div>
        </div>
      </div>
    </div>

    <!-- 装饰部分 -->
    <div class="stars">
      <div class="star orange pointy star-1"><div class="star-element"></div></div>
      <div class="star orange pointy star-2"><div class="star-element"></div></div>
      <div class="star yellow pointy star-3"><div class="star-element"></div></div>
      <div class="star yellow pointy star-4"><div class="star-element"></div></div>
      <div class="star blue round star-5"><div class="star-element"></div></div>
      <div class="star blue round star-6"><div class="star-element"></div></div>
    </div>
  </div>

  <!-- 阴影 -->
  <div class="shadow-container">
    <div class="shadow"></div>
    <div class="shadow-bottom"></div>
  </div>
</div>
<!-- partial -->
  <script src="./script.js"></script>

</body>
</html>
/*
动画原型参看https://dribbble.com/shots/3055734-Have-a-Happy-Halloween 和 https://dribbble.com/shots/3878696-Happy-Halloween!
*/

// 设定参数
class Ghost {
    constructor(el) {
      this.scene = el;
      this.clone = el.cloneNode(true);
      this.isEscaping = false;
      this.ghost = el.querySelector('.ghost');
      this.face = el.querySelector('.ghost-face');
      this.eyes = el.querySelector('.eyes-row');
      this.leftEye = this.eyes.querySelector('.left');
      this.rightEye = this.eyes.querySelector('.right');
      this.mouth = el.querySelector('.mouth');
      this.mouthState = 'neutral';
      this.shadow = el.querySelector('.shadow-container');
      this.leftCheek = el.querySelector('.left.cheek');
      this.leftCheek = el.querySelector('.right.cheek');
      this.leftHand = el.querySelector('.hand-left');
      this.rightHand = el.querySelector('.right-hand');
      this.activityInterval = null;
    }
    
    reset() {
      this.scene.remove();
      this.scene = this.clone.cloneNode(true);
      this.resetRefs();
      this.scene.classList.remove('stars-out');
      this.scene.style.position = 'absolute';
      this.scene.style.left = Math.floor(Math.random() * (document.querySelector('body').getBoundingClientRect().width - 140)) + 'px';
      this.scene.style.top = Math.floor(Math.random() * (document.querySelector('body').getBoundingClientRect().height - 160)) + 'px';
      this.scene.classList.add('descend');
      this.shadow.classList.add('disappear');
      document.querySelector('body').append(this.scene);
      this.enter();
    }
    
    resetRefs() {
      this.ghost = this.scene.querySelector('.ghost');
      this.face = this.scene.querySelector('.ghost-face');
      this.eyes = this.scene.querySelector('.eyes-row');
      this.leftEye = this.eyes.querySelector('.left');
      this.rightEye = this.eyes.querySelector('.right');
      this.mouth = this.scene.querySelector('.mouth');
      this.mouthState = 'neutral';
      this.isEscaping = false;
      this.shadow = this.scene.querySelector('.shadow-container');
      this.leftCheek = this.scene.querySelector('.left.cheek');
      this.leftCheek = this.scene.querySelector('.right.cheek');
      this.leftHand = this.scene.querySelector('.hand-left');
      this.rightHand = this.scene.querySelector('.right-hand');
    }

    // 眨眼睛
    blink() {
      this.leftEye.classList.add('blink');
      this.rightEye.classList.add('blink');
      setTimeout(() => {
        this.leftEye.classList.remove('blink');
        this.rightEye.classList.remove('blink');
      }, 50)
    }
    
    // 挥手动作
    wave() {
      this.leftHand.classList.add('waving');
      setTimeout(() => {
        this.leftHand.classList.remove('waving');
      }, 500);
    }
    
    // 嘴
    openMouth() {
      this.mouth.classList.remove('closed');
      this.mouth.classList.add('open');
      this.mouthState = 'open';
    }
    
    closeMouth() {
      this.mouth.classList.remove('open');
      this.mouth.classList.add('closed');
      this.mouthState = 'closed';
    }
    
    neutralMouth() {
      this.mouth.classList.remove('open');
      this.mouth.classList.remove('closed');
      this.mouthState = 'neutral';
    }
    
    // 鼠标放上时的状态
    hover() {
      this.ghost.classList.add('hover');
    }
    
    surprise() {
      this.face.classList.add('surprised');
    }
    
    // 逃离状态
    runAway() {
      clearInterval(this.activityInterval);
      if (!this.isEscaping) {
        this.isEscaping = true;
        this.scene.classList.add('run-away', 'move-stars-in');
        this.scene.classList.remove('stars-out');
        setTimeout(() => {
          this.shadow.classList.add('disappear');
          setTimeout(() => {
            this.reset();
          }, Math.floor(Math.random()*1000) + 500);
        }, 450);
      }
    }
    
    // 回来时状态
    enter() {
      setTimeout(() => {
        this.shadow.classList.remove('disappear');
      }, 5);
      setTimeout(() => {
        this.scene.classList.remove('descend');
        this.scene.classList.add('stars-out', 'move-stars-out');
      }, 600);
      setTimeout(() => {
        this.hover();
        this.prepareEscape();
        this.startActivity();
      }, 1200)
    }
    
    startActivity() {
      this.activityInterval = setInterval(() => {
        switch (Math.floor(Math.random()*4)) {
          case 0:
            this.blink();
            setTimeout(() => { this.blink() }, 400);
            setTimeout(() => { this.blink() }, 1300);
            break;
          case 1:
            this.wave();
            break;
          default:
            break;
        }
      }, 7000);
    }
    
    prepareEscape() {
      this.scene.addEventListener('click', () => { this.runAway() }, false);
      this.scene.addEventListener('mouseover', () => { this.runAway() }, false);
      this.scene.addEventListener('focus', () => { this.runAway() }, false);
    }
  }
  
  let ghost = new Ghost(document.querySelector('.scene-container'));

  ghost.hover();
  ghost.startActivity();
  ghost.prepareEscape();
html {
    height: 100%;
}

body {
    height: 100%;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #292B25;
}

.scene-container {
    position: relative;
    width: 140px;
    height: 160px;
}

.scene-container:focus {
    outline: none;
}

.scene-container.run-away .ghost {
    transform: rotateX(-10deg) scale3d(1.4, 4, 1) translate3d(0, 130%, -30px);
    transition: transform 800ms ease;
}

.scene-container.descend .ghost {
    transform: translate3d(0, 130%, 0);
}

.ghost-container {
    position: relative;
    width: 80px;
    height: 140px;
    padding: 20px 30px 0 30px;
    overflow: hidden;
    perspective: 30px;
}

.ghost {
    position: relative;
    height: 115px;
    z-index: 1;
    transition: transform 2000ms ease-out;
}

.ghost.hover {
    -webkit-animation: hover 600ms ease-in-out infinite alternate;
    animation: hover 600ms ease-in-out infinite alternate;
}

.ghost-head {
    position: relative;
    width: 80px;
    height: 0;
    padding-top: 100%;
    border-radius: 100%;
    background-color: #F0EFDC;
}

.ghost-head .ghost-face {
    position: absolute;
    bottom: 10px;
    left: 10px;
    width: 50px;
    height: 30px;
    z-index: 1;
}

.eyes-row, .mouth-row {
    position: relative;
    height: 10px;
}

.mouth-row {
    margin-top: 3px;
}

.eye {
    height: 10px;
    width: 10px;
    background-color: #271917;
    border-radius: 100%;
    position: absolute;
    bottom: 0;
    transition: height 50ms ease;
}

.eye.left {
    left: 5px;
}

.eye.right {
    right: 5px;
}

.eye.blink {
    height: 0;
}

.mouth {
    position: absolute;
    left: 50%;
    top: 0;
    height: 10px;
    transform: translate3d(-50%, 0, 0);
}

.mouth .mouth-top {
    width: 18px;
    height: 2px;
    border-radius: 2px 2px 0 0;
    background-color: #271917;
}

.mouth .mouth-bottom {
    position: absolute;
    width: 18px;
    height: 8px;
    bottom: 0;
    overflow: hidden;
    transition: height 150ms ease;
}

.mouth .mouth-bottom:after {
    content: "";
    display: block;
    position: absolute;
    left: 0;
    bottom: 0;
    width: 18px;
    height: 16px;
    border-radius: 100%;
    background-color: #271917;
}

.mouth.open .mouth-bottom {
    height: 16px;
}

.mouth.closed .mouth-bottom {
    height: 0;
}

.cheek {
    position: absolute;
    top: 0;
    width: 12px;
    height: 4px;
    background-color: #F5C1B6;
    border-radius: 100%;
}

.cheek.left {
    left: 0;
}

.cheek.right {
    right: 0;
}

.ghost-body {
    position: absolute;
    top: 40px;
    height: 0;
    width: 80px;
    padding-top: 85%;
    background-color: #F0EFDC;
}

.ghost-hand {
    height: 36px;
    width: 22px;
    background: #F0EFDC;
    border-radius: 100%/90%;
    position: absolute;
}

.ghost-hand.hand-left {
    left: -12px;
    top: 10px;
    transform: rotateZ(-45deg);
    left: 0;
    top: 5px;
    transform-origin: bottom center;
}

.ghost-hand.hand-left.waving {
    -webkit-animation: waving 400ms linear;
    animation: waving 400ms linear;
}

.ghost-hand.hand-right {
    right: -12px;
    top: 10px;
    transform: rotateZ(45deg);
}

.ghost-skirt {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    display: flex;
    transform: translateY(50%);
}

.ghost-skirt .pleat {
    width: 20%;
    height: 8px;
    border-radius: 100%;
}

.ghost-skirt .pleat.down {
    background-color: #F0EFDC;
}

.ghost-skirt .pleat.up {
    background-color: #292B25;
    position: relative;
    top: 1px;
}

.shadow-container {
    transition: transform 800ms ease;
}

.shadow-container.disappear {
    transform: scale3d(0, 1, 1);
    transition: transform 400ms ease;
}

.shadow {
    position: absolute;
    top: calc(100% - 4px);
    left: 0;
    width: 100%;
    height: 8px;
    background-color: #1B1D18;
    border-radius: 100%;
    z-index: -1;
}

.shadow-bottom {
    position: absolute;
    top: 100%;
    left: 0;
    height: 4px;
    width: 100%;
    overflow: hidden;
}

.shadow-bottom:after {
    content: "";
    display: block;
    width: 100%;
    position: absolute;
    height: 8px;
    left: 0;
    bottom: 0;
    border-radius: 100%;
    background-color: #1B1D18;
    z-index: 2;
}

.star {
    position: absolute;
    -webkit-animation: twinkle 2s infinite linear;
    animation: twinkle 2s infinite linear;
    transition: top 400ms ease-out, left 400ms ease-out;
}

.star.round .star-element {
    height: 9px;
    width: 9px;
    border-radius: 100%;
}

.star.pointy {
    transform: rotate(-15deg);
}

.star.pointy .star-element {
    height: 6px;
    width: 6px;
}

.star.pointy .star-element:before, .star.pointy .star-element:after {
    content: "";
    display: block;
    position: absolute;
    background: green;
    border-radius: 6px;
}

.star.pointy .star-element:before {
    height: 6px;
    width: 12px;
    left: -3px;
    top: 0;
    transform: skewX(60deg);
}

.star.pointy .star-element:after {
    height: 12px;
    width: 6px;
    right: 0;
    bottom: -3px;
    transform: skewY(-60deg);
}

.star.orange .star-element, .star.orange .star-element:before, .star.orange .star-element:after {
    background-color: #DF814D;
}

.star.yellow .star-element, .star.yellow .star-element:before, .star.yellow .star-element:after {
    background-color: #FFD186;
}

.star.blue .star-element, .star.blue .star-element:before, .star.blue .star-element:after {
    background-color: #83D0BC;
}

.star-1 {
    top: 130%;
    left: 40%;
    transition-delay: 200ms;
    -webkit-animation-delay: 0ms;
    animation-delay: 0ms;
    z-index: 2;
}

.star-2 {
    top: 130%;
    left: 44%;
    transition-delay: 250ms;
    -webkit-animation-delay: 200ms;
    animation-delay: 200ms;
}

.star-3 {
    top: 130%;
    left: 48%;
    transition-delay: 300ms;
    -webkit-animation-delay: 400ms;
    animation-delay: 400ms;
    z-index: 2;
}

.star-4 {
    top: 130%;
    left: 52%;
    transition-delay: 350ms;
    -webkit-animation-delay: 600ms;
    animation-delay: 600ms;
}

.star-5 {
    top: 130%;
    left: 56%;
    transition-delay: 400ms;
    -webkit-animation-delay: 800ms;
    animation-delay: 800ms;
    z-index: 2;
}

.star-6 {
    top: 130%;
    left: 60%;
    transition-delay: 450ms;
    -webkit-animation-delay: 1000ms;
    animation-delay: 1000ms;
}

.move-stars-out .star-element {
    -webkit-animation: star-entrance 1500ms;
    animation: star-entrance 1500ms;
}

.stars-out .star {
    transition: top 1500ms ease-out, left 1500ms ease-out;
}

.stars-out .star-1 {
    top: 75%;
    left: 6%;
}

.stars-out .star-2 {
    top: 35%;
    left: 88%;
}

.stars-out .star-3 {
    top: 8%;
    left: 20%;
}

.stars-out .star-4 {
    top: 70%;
    left: 92%;
}

.stars-out .star-5 {
    top: 35%;
    left: 4%;
}

.stars-out .star-6 {
    top: 2%;
    left: 70%;
}

.stars-out .star-1 {
    transition-delay: 0ms, 0ms;
}

.stars-out .star-1 .star-element {
    -webkit-animation-delay: 0ms;
    animation-delay: 0ms;
}

.stars-out .star-2 {
    transition-delay: 200ms, 200ms;
}

.stars-out .star-2 .star-element {
    -webkit-animation-delay: 200ms;
    animation-delay: 200ms;
}

.stars-out .star-3 {
    transition-delay: 400ms, 400ms;
}

.stars-out .star-3 .star-element {
    -webkit-animation-delay: 400ms;
    animation-delay: 400ms;
}

.stars-out .star-4 {
    transition-delay: 600ms, 600ms;
}

.stars-out .star-4 .star-element {
    -webkit-animation-delay: 600ms;
    animation-delay: 600ms;
}

.stars-out .star-5 {
    transition-delay: 800ms, 800ms;
}

.stars-out .star-5 .star-element {
    -webkit-animation-delay: 800ms;
    animation-delay: 800ms;
}

.stars-out .star-6 {
    transition-delay: 1000ms, 1000ms;
}

.stars-out .star-6 .star-element {
    -webkit-animation-delay: 1000ms;
    animation-delay: 1000ms;
}

.move-stars-in .star-element {
    -webkit-animation: star-exit 400ms linear;
    animation: star-exit 400ms linear;
}

.move-stars-in .star-1 .star-element {
    -webkit-animation-delay: 100ms;
    animation-delay: 100ms;
}

.move-stars-in .star-2 .star-element {
    -webkit-animation-delay: 150ms;
    animation-delay: 150ms;
}

.move-stars-in .star-3 .star-element {
    -webkit-animation-delay: 200ms;
    animation-delay: 200ms;
}

.move-stars-in .star-4 .star-element {
    -webkit-animation-delay: 250ms;
    animation-delay: 250ms;
}

.move-stars-in .star-5 .star-element {
    -webkit-animation-delay: 300ms;
    animation-delay: 300ms;
}

.move-stars-in .star-6 .star-element {
    -webkit-animation-delay: 350ms;
    animation-delay: 350ms;
}

/* 动画部分 */

@-webkit-keyframes hover {
    0% {
        top: 0;
    }
    100% {
        top: 8px;
    }
}

@keyframes hover {
    0% {
        top: 0;
    }
    100% {
        top: 8px;
    }
}

@-webkit-keyframes star-entrance {
    0% {
        transform: rotate(-735deg) scale(0, 0);
    }
    100% {
        transform: rotate(0) scale(1, 1);
    }
}

@keyframes star-entrance {
    0% {
        transform: rotate(-735deg) scale(0, 0);
    }
    100% {
        transform: rotate(0) scale(1, 1);
    }
}

@-webkit-keyframes star-exit {
    0% {
        transform: rotate(0) scale(1, 1);
    }
    100% {
        transform: rotate(360deg) scale(0, 0);
    }
}

@keyframes star-exit {
    0% {
        transform: rotate(0) scale(1, 1);
    }
    100% {
        transform: rotate(360deg) scale(0, 0);
    }
}

@-webkit-keyframes twinkle {
    0% {
        transform: rotate(0deg) scale(1, 1);
    }
    25% {
        transform: rotate(10deg) scale(0.8, 0.8);
    }
    50% {
        transform: rotate(0deg) scale(0.9, 0.9);
    }
    75% {
        transform: rotate(-20deg) scale(0.6, 0.6);
    }
    100% {
        transform: rotate(0deg) scale(1, 1);
    }
}

@keyframes twinkle {
    0% {
        transform: rotate(0deg) scale(1, 1);
    }
    25% {
        transform: rotate(10deg) scale(0.8, 0.8);
    }
    50% {
        transform: rotate(0deg) scale(0.9, 0.9);
    }
    75% {
        transform: rotate(-20deg) scale(0.6, 0.6);
    }
    100% {
        transform: rotate(0deg) scale(1, 1);
    }
}

@-webkit-keyframes waving {
    0% {
        transform: rotate(-45deg);
    }
    25% {
        transform: rotate(-55deg);
    }
    50% {
        transform: rotate(-45deg);
    }
    75% {
        transform: rotate(-55deg);
    }
    100% {
        transform: rotate(-45deg);
    }
}

@keyframes waving {
    0% {
        transform: rotate(-45deg);
    }
    25% {
        transform: rotate(-55deg);
    }
    50% {
        transform: rotate(-45deg);
    }
    75% {
        transform: rotate(-55deg);
    }
    100% {
        transform: rotate(-45deg);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/545531.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EV证书——打造高端信任,构建网络信任的坚固屏障

简介 随着网络交易和在线活动的日益频繁&#xff0c;消费者对网络安全和隐私保护的意识不断提高。在这样的背景下&#xff0c;扩展验证&#xff08;Extended Validation, EV&#xff09;证书作为一种更高级别的SSL证书&#xff0c;成为了众多企业尤其是电子商务、金融机构和高…

水水水水水水水水水水水水

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

python爬取京东商品信息与可视化

项目介绍&#xff1a;使用python爬取京东电商拿到价格、店铺、链接、销量并做可视化 ........................................................................................................................................................... 项目介绍效果展示全部…

CentOS7使用Docker搭建Joplin Server并实现多端同步与公网使用本地笔记

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

WP免费主题下载

免费wordpress模板下载 高端大气上档次的免费wordpress主题&#xff0c;首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html 免费WP主题 蓝色简洁实用的wordpress免费主题模板&#xff0c;免费主题资源分享给大家。 https://www.wpniu.com/…

前端导出excel 接口处理和导出处理

如果按照一般的请求方式&#xff0c;接口会返回如下乱码 此时&#xff0c;接口其实已经请求成功了&#xff0c;只需要对乱码进行一下处理就行 1.请求方式处理 1.1 如果是直接使用axios进行请求 axios({method: get,url: url,params: params,//需要添加responseType: blob }…

永磁同步电机无感FOC(扩展卡尔曼滤波EKF位置观测控制)

文章目录 1、前言2、扩展卡尔曼滤波器原理2.1 预测阶段&#xff08;时间更新阶段&#xff09;2.2 校正阶段&#xff08;状态更新阶段&#xff09; 3、永磁同步电机EKF的模型4、永磁同步电机EKF的无位置状态观测仿真4.1 核心模块&#xff08;在滑膜、龙伯格、磁链等观测器基础上…

一个500路监控的工程项目要如何选择交换机?其实很简单

你们好&#xff0c;我的网工朋友。 前几天我们讲到一台交换机能带动多少网络监控摄像头&#xff0c;这里贴个原文链接《提问&#xff1a;一台交换机能带动多少个网络监控摄像头&#xff1f;》。 那么在构建一个拥有500路监控的庞大工程项目时&#xff0c;我们该如何选择合适的…

【简单讲解如何安装与配置Composer】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

代码随想录——动态规划

系列文章目录 代码随想录——回溯 代码随想录——贪心算法 代码随想录——动态规划 文章目录 系列文章目录概述简单斐波那契数***爬楼梯***使用最小花费爬楼梯不同路径不同路径 II***整数拆分***不同的二叉搜索树***普通0-1背包***分割等和子集***最后一块石头的重量 II***目标…

excel添加折线图,如何将日期作为横坐标?

就这么两列数据&#xff0c;想添加一个以日期为横坐标的折线图&#xff0c;但是出来的折线是这个样子&#xff0c;切换行/列也不行&#xff0c;怎么办呢&#xff1f; 实际上这个折线图中包括两条折线&#xff0c;蓝色的是日期的折线&#xff0c;橙色的是时间的折线&#xff0c;…

6.5V/1.5A线性稳压器负载瞬态响应快可调输出电压

概述 PCD3932 是一款低噪声、低压差线性稳压器 (LDO)&#xff0c;可提供 1.5A 输出电流&#xff0c;最大压降仅为 160mV。该器件提供两种输出电压范围。 PCD3932 的输出电压可通过外部电阻分压器在 0.5V 至 5.5V 范围内进行调节。PCD3932 集低噪声、高 PSRR 和高输出电流能力等…

linux系统USB/IP远程共享USB设备 —— 筑梦之路

概述 USB/IP 是一个开源项目&#xff0c;已合入 Kernel&#xff0c;在 Linux 环境下可以通过使用 USB/IP 远程共享 USB 设备。 USB Client&#xff1a;使用USB的终端&#xff0c;将server共享的usb设备挂载到本地。 USB Server&#xff1a;分享本地的usb设备至远程。 架构原理…

YOLOv8 测试 5-2:Linux 中 Dockerfile 部署 YOLOv8 项目一键运行,Python 封装 API 接口测试

一、前言 记录时间 [2024-4-15] 系列文章简摘&#xff1a; Docker 学习笔记&#xff08;二&#xff09;&#xff1a;在 Linux 中部署 Docker&#xff08;Centos7 下安装 docker、环境配置&#xff0c;以及镜像简单使用&#xff09; API 接口简单使用&#xff08;二&#xff09;…

海外媒体发稿:新加坡 Asia One VS新加坡sg雅虎

海外媒体发稿&#xff1a;新加坡 Asia One VS新加坡sg雅虎 新加坡&#xff1a;雅虎 官网&#xff1a;sy.yahoo.com 官网&#xff1a;asiaone.com/lite 亚洲第一站。是 新加坡的新闻和生活方式网站和新闻聚合器。它是 新加坡第一个纯数字 内容平台&#xff0c;主要为新加坡、…

【攻防世界】bug

垂直越权IP绕过文件上传 文件上传绕过&#xff1a; 1. mime检测 2. 大小写绕过 3. 等价替换&#xff08;php5&#xff0c;php3&#xff09; 4. 利用JavaScript执行php代码&#xff08;正常的php代码会被检测到&#xff0c;所以就用JavaScript来执行&#xff09; <script lan…

docker特殊问题处理3——docker-compose安装配置nacos

最近几年随着大数据和人工智能持续大热&#xff0c;容器化安装部署运维已经走进了各个中小公司&#xff0c;也得已让众多开发者能上手实际操作&#xff0c;不过说真心话&#xff0c;“万物皆可容器化”的理念越来越深入人心。 而如何使用docker-compose安装&#xff0c;配置&a…

dremio作业概括

1. Summary 属性 描述 Status 表示一个或多个作业状态。作业和状态 Total Memory 提供有关查询操作的实际成本&#xff08;以内存为单位&#xff09;的统计信息。 CPU Used 提供有关查询操作的实际成本&#xff08;CPU 处理&#xff09;的统计信息。 Query Type 表示五…

IDEA设置文件编码

全局编码&#xff1a;UTF-8 项目编码&#xff1a;UTF-8 属性文件的默认编码&#xff1a;UTF-8 自动转换成Ascii但现实原生的内容&#xff1a;勾上

An Investigation of Geographic Mapping Techniques for Internet Hosts(2001年)第一部分

下载地址:An investigation of geographic mapping techniques for internet hosts | Proceedings of the 2001 conference on Applications, technologies, architectures, and protocols for computer communications 被引次数:766 Padmanabhan V N, Subramanian L. An in…