14 vue3之内置组件trastion全系列

news2024/11/14 18:38:04

前置知识

 Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡:

  • 条件渲染 (使用 v-if)
  • 条件展示 (使用 v-show)
  • 动态组件
  • 组件根节点

自定义 transition 过度效果,你需要对transition组件的name属性自定义。并在css中写入对应的样式

web 动画库-CSDN博客文章浏览阅读2次。动画领域有一个比较知名的CSS库:Animate.css,它提供了60多种动画,满足一般网页的需求,比如淡入淡出、闪现等等一系列日常动画,不过虽然它能满足日常需求,但是一些复杂的场景就需要靠JS手动去操作,比如界面滚动到某个元素才开始播放动画,比如拖拽、比如滚动界面时,动态调整元素就需要使用到GreenSockhttps://blog.csdn.net/qq_37550440/article/details/142390818?sharetype=blogdetail&sharerId=142390818&sharerefer=PC&sharesource=qq_37550440&spm=1011.2480.3001.8118

 安装依赖包

npm i @types/lodash lodash

npm i animate.css

npm i gsap

 

1.过渡的类名 name

在进入/离开的过渡中,会有 6 个 class 切换。

v-enter-from:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。

v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。

v-enter-to:定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter-from 被移除),在过渡/动画完成之后移除。

v-leave-from:定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。

v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。

v-leave-to:离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave-from 被移除),在过渡/动画完成之后移除。

<template>
  <h2>transition name基础用法</h2>
  <button @click="flag0 = !flag0">切换0</button>
  <transition
    :duration="{ enter: 500, leave: 800 }"
    name="fade0"
  >
    <div class="box" v-if="flag0"></div>
  </transition>
</template>

<script setup lang="ts">
import { ref, reactive, watch } from "vue";
let flag0 = ref(false);
</script>

<style lang="less" scoped>
.box {
  width: 200px;
  height: 200px;
  background-color: pink;
}
// 切换0
//进入之前
.fade0-enter-from {
  width: 0px;
  height: 0px;
}
//进入过程
.fade0-enter-active {
  transition: all 2s ease;
}
// 最后一帧
.fade0-enter-to {
  //进入完成最好和box保持一致
  width: 200px;
  height: 200px;
  background: red;
}
.fade0-leave-from {
  //离开之前
  width: 200px;
  height: 200px;
}
.fade0-leave-active {
  //离开过程
  transition: all 3s linear;
}
.fade0-leave-to {
  //离开的最后一帧
  width: 0px;
  height: 0px;
}

</style>

2.自定义过渡 class 类名

trasnsition props

  • enter-from-class
  • enter-active-class
  • enter-to-class
  • leave-from-class
  • leave-active-class
  • leave-to-class
<template>
    <button @click="flag = !flag">切换1</button>
  <h2>
    transition 自定义过渡 class 类名
    每个都对应一个类名,与name的区别是能结合第三方的内库使用
  </h2>
  <transition
    name="fade"
    enter-from-class="e-from"
    enter-active-class="e-active"
    enter-to-class="e-to"
  >
    <div class="box" v-if="flag"></div>
  </transition>
</template>

<script setup lang="ts">
import { ref, reactive, watch } from "vue";
let flag = ref(false);
</script>

<style lang="less" scoped>
// 切换1样式
.fade-enter-from, //进入之前
.e-from {
  width: 0px;
  height: 0px;
}
.fade-enter-active, //进入过度
.e-active {
  transition: all 2.5s ease;
  transform: rotate(360);
}

.fade-enter-to, // 进入完成
.e-to {
  width: 200px;
  height: 200px;
}
.fade-leave-from {
  // 离开之前
  width: 200px;
  height: 200px;
}
.fade-leave-active {
  //离开过度
  transition: all 2.5s ease;
  transform: rotate(360);
}

.fade-leave-to {
  // 离开完成
  width: 20px;
  height: 20px;
}
</style>

3 自定义class结合animate.css案例

<template>
<h2>transition 结合animate使用, 更丝滑</h2>
  <button @click="flag2 = !flag2">animate切换2</button>
  <transition
    :duration="{ enter: 500, leave: 800 }"
    leave-active-class="animate__animated animate__bounceInLeft"
    enter-active-class="animate__animated animate__bounceInRight"
  >
    <div class="box" v-if="flag2"></div>
  </transition>
</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";
let flag2 = ref(false);
</script>

<style lang="less" scoped></style>

4.transition 生命周期8个

<template>
<h2>transition 的8个生命周期函数</h2>
  <button @click="flag3 = !flag3">切换3</button>
  <transition
    @before-enter="beforeEnter"
    @enter="enterActive"
    @after-enter="enterTo"
    @enter-cancelled="enterCancelled"
    @before-leave="beforeLeave"
    @leave="leaveActive"
    @after-leave="leaveTo"
    @leave-cancelled="leaveCancelled"
  >
    <div class="box" v-if="flag3"></div>
  </transition>

</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";
let flag0 = ref(false);

let beforeEnter = (el: Element) => {
  //对应enter-from
  console.log("进入之前", el);
};
let enterActive = (el: Element, done: Function) => {
  //对应enter-active
  console.log("过度曲线");
  setTimeout(() => {
    done();
  }, 3000);
};
let enterTo = (el: Element) => {
  //对应enter-to
  console.log("进入完成");
};
let enterCancelled = () => {
  //多点击几次
  console.log("过度效果被打断");
  //显示过程被打断
};
let beforeLeave = () => {
  //对应leave-from
  console.log("离开之前");
};
let leaveActive = (el: Element, done: Function) => {
  //对应enter-activem
  console.log("离开过度曲线");
  setTimeout(() => {
    done();
  }, 3000);
};
let leaveTo = () => {
  //对应leave-to
  console.log("离开完成");
};
let leaveCancelled = () => {
  //离开过度打断
};
</script>

<style lang="less" scoped></style>

5 transition生命周期与gsap结合使用案例

<template>
<h2>
    transition生命周期钩子函数 与gsap 结合案例 npm i gsap
    最健全的web动画库之一, 更丝滑
  </h2>
  <button @click="flag4 = !flag4">gsap切换4</button>
  <transition
    @before-enter="beforeEnter1"
    @enter="enter1"
    @leave="leave1"
  >
    <div class="box" v-if="flag4"></div>
  </transition>

</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";
let flag4 = ref(false);
let beforeEnter1 = (el: Element) => {
  gsap.set(el, {
    width: 0,
    height: 0,
  });
};
let enter1 = (el: Element, done: gsap.Callback) => {
  gsap.to(el, {
    width: 200,
    height: 200,
    onComplete: done,
  });
};
let leave1 = (el: Element, done: gsap.Callback) => {
  gsap.to(el, {
    width: 0,
    height: 0,
    onComplete: done,
  });
};
</script>

<style lang="less" scoped></style>

6 appear自动加载的动画可用于大屏使用

<template>
<h2>transition 之appear首次页面加载完成后的动画 案例</h2>
  <transition
    appear
    appear-from-class="appear-from"
    appear-active-class="appear-active"
    appear-to-class="appear-to"
  >
    <div class="box"></div>
  </transition>
  <hr />

</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";

</script>

<style lang="less" scoped>
.appear-from {
  width: 0;
  height: 0;
}
.appear-active {
  transition: all 2.5s ease;
}
.appear-to {
  width: 200px;
  height: 200px;
}
</style>

7 transition 之appear与结合animate使用 案例

<template>
  <h2>transition 之appear与结合animate使用 案例</h2>
  <transition
    appear
    appear-active-class="animate__animated animate__bounceInRight"
  >
    <div class="box"></div>
  </transition>
</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";
let flag0 = ref(false);
</script>

<style lang="less" scoped></style>

transition-group

8 transition-group过度列表

单个节点
多个节点,每次只渲染一个
那么怎么同时渲染整个列表,比如使用 v-for?在这种场景下,我们会使用 <transition-group> 组件。在我们深入例子之前,先了解关于这个组件的几个特点:

默认情况下,它不会渲染一个包裹元素,但是你可以通过 tag attribute 指定渲染一个元素。
过渡模式不可用,因为我们不再相互切换特有的元素。
内部元素总是需要提供唯一的 key attribute 值。
CSS 过渡的类将会应用在内部的元素中,而不是这个组/容器本身。

<template>
 <h2>transition group使用</h2>
  <button @click="add">add</button>
  <button @click="pop">pop</button>
  <div class="group_wraps">
    <transition-group
      enter-active-class="animate__animated animate__bounceInRight"
      leave-active-class="animate__animated animate__bounceInLeft"
    >
      <div v-for="(item, index) in list" :key="index">
        {{ item }}
      </div>
    </transition-group>
  </div>
</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";
let flag0 = ref(false);
let list = reactive<number[]>([1, 2, 3, 4]);
let add = () => {
  list.push(list.length + 1);
};
let pop = () => {
  list.pop();
};
</script>

<style lang="less" scoped></style>

9 列表的(平移)移动过渡  move-class

<transition-group> 组件还有一个特殊之处。除了进入和离开,它还可以为定位的改变添加动画。只需了解新增的 v-move 类就可以使用这个新功能,它会应用在元素改变定位的过程中。像之前的类名一样,它的前缀可以通过 name attribute 来自定义,也可以通过 move-class attribute 手动设置

<template>
  <h2>
    transition group(底层是aerotwist FLIP这个动画库实现的)
    列表过渡动画案例 平移过度move-class npm i @types/lodash
    lodash
  </h2>
  <button @click="random">random</button>
  <transition-group
    tag="div"
    class="wraps"
    move-class="group_move"
    enter-active-class="animate__animated animate__bounceInRight"
    leave-active-class="animate__animated animate__bounceInLeft"
  >
    <div class="item" v-for="item in data" :key="item.id">
      {{ item.number }}
    </div>
  </transition-group>
</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";
//区别 new Array(81)得到的是[空属性(Empty attribute) × 81] 与 Array.apply(null,[1,2,3]) 第一个参数是this指向,第二个参数是数组
// ts检测到第二个参数不是数组我们要假装他是一个数组用as number[]
/*
list = ['a','b']
list.map((item,index)=>{ // 第一个参数是item,第二个是index
    console.log(item) a ,b
    console.log(index) 0 ,1
})

1%1 = 0
1%9 = 1
1%10 = 1

*/
let data = ref(
  Array.apply(null, {
    length: 81,
  } as number[]).map((_, index) => {
    return {
      id: index, // 作为key
      number: (index % 9) + 1, // 从1开始  1-9*1-9的组合
    };
  })
);

let random = () => {
  data.value = _.shuffle(data.value);
};

let num = reactive({
  currentNum: 0,
  gsapNum: 0,
});

watch(
  () => num.currentNum,
  (newVal) => {
    gsap.to(num, {
      duration: 1,
      gsapNum: newVal,
    });
  }
);
</script>

<style lang="less" scoped>
.wraps {
  display: flex;
  flex-wrap: wrap;
  width: calc(20px * 10 + 10px); // 整个父级的宽度,合理换行
  .item {
    width: 20px;
    height: 20px;
    border: 1px solid #ccc;
    list-style-type: none;
    display: flex;
    justify-content: center;
    align-items: center;
  }
}
.group_move {
  transition: all 0.8s ease;
}
</style>

10 状态过度 借助gsap库案例

<template>
  <h2>状态过度 借助gsap库</h2>
  <h3>
    Vue 也同样可以给数字 Svg 背景颜色等添加过度动画
    今天演示数字变化
  </h3>
  <input v-model="num.currentNum" type="number" step="20" />
  <div>{{ num.gsapNum.toFixed(0) }}</div>
</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";

let num = reactive({
  currentNum: 0,
  gsapNum: 0,
});

watch(
  () => num.currentNum,
  (newVal) => {
    gsap.to(num, {
      duration: 1,
      gsapNum: newVal,
    });
  }
);
</script>

<style lang="less" scoped>
.wraps {
  display: flex;
  flex-wrap: wrap;
  width: calc(20px * 10 + 10px); // 整个父级的宽度,合理换行
  .item {
    width: 20px;
    height: 20px;
    border: 1px solid #ccc;
    list-style-type: none;
    display: flex;
    justify-content: center;
    align-items: center;
  }
}
.group_move {
  transition: all 0.8s ease;
}
</style>

完整实例代码

<template>
  <h2>transition name基础用法</h2>
  <button @click="flag0 = !flag0">切换0</button>
  <transition
    :duration="{ enter: 500, leave: 800 }"
    name="fade0"
  >
    <div class="box" v-if="flag0"></div>
  </transition>
  <hr />
  <button @click="flag = !flag">切换1</button>
  <h2>
    transition 自定义过渡 class 类名
    每个都对应一个类名,与name的区别是能结合第三方的内库使用
  </h2>
  <transition
    name="fade"
    enter-from-class="e-from"
    enter-active-class="e-active"
    enter-to-class="e-to"
  >
    <div class="box" v-if="flag"></div>
  </transition>
  <hr />
  <!--transition 结合animat使用  npm i animate.css  -->
  <h2>transition 结合animate使用, 更丝滑</h2>
  <button @click="flag2 = !flag2">animate切换2</button>
  <transition
    :duration="{ enter: 500, leave: 800 }"
    leave-active-class="animate__animated animate__bounceInLeft"
    enter-active-class="animate__animated animate__bounceInRight"
  >
    <div class="box" v-if="flag2"></div>
  </transition>
  <hr />
  <h2>transition 的8个生命周期函数</h2>
  <button @click="flag3 = !flag3">切换3</button>
  <transition
    @before-enter="beforeEnter"
    @enter="enterActive"
    @after-enter="enterTo"
    @enter-cancelled="enterCancelled"
    @before-leave="beforeLeave"
    @leave="leaveActive"
    @after-leave="leaveTo"
    @leave-cancelled="leaveCancelled"
  >
    <div class="box" v-if="flag3"></div>
  </transition>
  <hr />
  <h2>
    transition生命周期钩子函数 与gsap 结合案例 npm i gsap
    最健全的web动画库之一, 更丝滑
  </h2>
  <button @click="flag4 = !flag4">gsap切换4</button>
  <transition
    @before-enter="beforeEnter1"
    @enter="enter1"
    @leave="leave1"
  >
    <div class="box" v-if="flag4"></div>
  </transition>
  <hr />
  <h2>transition 之appear首次页面加载完成后的动画 案例</h2>
  <transition
    appear
    appear-from-class="appear-from"
    appear-active-class="appear-active"
    appear-to-class="appear-to"
  >
    <div class="box"></div>
  </transition>
  <hr />
  <h2>transition 之appear与结合animate使用 案例</h2>
  <transition
    appear
    appear-active-class="animate__animated animate__bounceInRight"
  >
    <div class="box"></div>
  </transition>
  <hr />
  <h2>transition group使用</h2>
  <button @click="add">add</button>
  <button @click="pop">pop</button>
  <div class="group_wraps">
    <transition-group
      enter-active-class="animate__animated animate__bounceInRight"
      leave-active-class="animate__animated animate__bounceInLeft"
    >
      <div v-for="(item, index) in list" :key="index">
        {{ item }}
      </div>
    </transition-group>
  </div>

  <hr />
  <h2>
    transition group(底层是aerotwist FLIP这个动画库实现的)
    列表过渡动画案例 平移过度move-class npm i @types/lodash
    lodash
  </h2>
  <button @click="random">random</button>
  <transition-group
    tag="div"
    class="wraps"
    move-class="group_move"
    enter-active-class="animate__animated animate__bounceInRight"
    leave-active-class="animate__animated animate__bounceInLeft"
  >
    <div class="item" v-for="item in data" :key="item.id">
      {{ item.number }}
    </div>
  </transition-group>
  <hr />
  <h2>状态过度 借助gsap库</h2>
  <h3>
    Vue 也同样可以给数字 Svg 背景颜色等添加过度动画
    今天演示数字变化
  </h3>
  <input v-model="num.currentNum" type="number" step="20" />
  <div>{{ num.gsapNum.toFixed(0) }}</div>
</template>

<script setup lang="ts">
import "animate.css";
import gsap from "gsap";
import _ from "lodash"; // 报错的话就需要安装ts的声明文件 Npm I @type/lodash -D
import { ref, reactive, watch } from "vue";

let flag0 = ref(false);
let flag = ref(false);
let flag2 = ref(false);
let flag3 = ref(false);
let flag4 = ref(false);
let list = reactive<number[]>([1, 2, 3, 4]);

//区别 new Array(81)得到的是[空属性(Empty attribute) × 81] 与 Array.apply(null,[1,2,3]) 第一个参数是this指向,第二个参数是数组
// ts检测到第二个参数不是数组我们要假装他是一个数组用as number[]
/*
list = ['a','b']
list.map((item,index)=>{ // 第一个参数是item,第二个是index
    console.log(item) a ,b
    console.log(index) 0 ,1
})

1%1 = 0
1%9 = 1
1%10 = 1

*/
let data = ref(
  Array.apply(null, {
    length: 81,
  } as number[]).map((_, index) => {
    return {
      id: index, // 作为key
      number: (index % 9) + 1, // 从1开始  1-9*1-9的组合
    };
  })
);

let random = () => {
  data.value = _.shuffle(data.value);
};

let num = reactive({
  currentNum: 0,
  gsapNum: 0,
});

watch(
  () => num.currentNum,
  (newVal) => {
    gsap.to(num, {
      duration: 1,
      gsapNum: newVal,
    });
  }
);

let beforeEnter = (el: Element) => {
  //对应enter-from
  console.log("进入之前", el);
};
let enterActive = (el: Element, done: Function) => {
  //对应enter-active
  console.log("过度曲线");
  setTimeout(() => {
    done();
  }, 3000);
};
let enterTo = (el: Element) => {
  //对应enter-to
  console.log("进入完成");
};
let enterCancelled = () => {
  //多点击几次
  console.log("过度效果被打断");
  //显示过程被打断
};
let beforeLeave = () => {
  //对应leave-from
  console.log("离开之前");
};
let leaveActive = (el: Element, done: Function) => {
  //对应enter-activem
  console.log("离开过度曲线");
  setTimeout(() => {
    done();
  }, 3000);
};
let leaveTo = () => {
  //对应leave-to
  console.log("离开完成");
};
let leaveCancelled = () => {
  //离开过度打断
};

let beforeEnter1 = (el: Element) => {
  gsap.set(el, {
    width: 0,
    height: 0,
  });
};
let enter1 = (el: Element, done: gsap.Callback) => {
  gsap.to(el, {
    width: 200,
    height: 200,
    onComplete: done,
  });
};
let leave1 = (el: Element, done: gsap.Callback) => {
  gsap.to(el, {
    width: 0,
    height: 0,
    onComplete: done,
  });
};

let add = () => {
  list.push(list.length + 1);
};
let pop = () => {
  list.pop();
};
</script>

<style lang="less" scoped>
.box {
  width: 200px;
  height: 200px;
  background-color: pink;
}
// 切换0
//进入之前
.fade0-enter-from {
  width: 0px;
  height: 0px;
}
//进入过程
.fade0-enter-active {
  transition: all 2s ease;
}
// 最后一帧
.fade0-enter-to {
  //进入完成最好和box保持一致
  width: 200px;
  height: 200px;
  background: red;
}
.fade0-leave-from {
  //离开之前
  width: 200px;
  height: 200px;
}
.fade0-leave-active {
  //离开过程
  transition: all 3s linear;
}
.fade0-leave-to {
  //离开的最后一帧
  width: 0px;
  height: 0px;
}
// 切换1样式
.fade-enter-from, //进入之前
.e-from {
  width: 0px;
  height: 0px;
}
.fade-enter-active, //进入过度
.e-active {
  transition: all 2.5s ease;
  transform: rotate(360);
}

.fade-enter-to, // 进入完成
.e-to {
  width: 200px;
  height: 200px;
}
.fade-leave-from {
  // 离开之前
  width: 200px;
  height: 200px;
}
.fade-leave-active {
  //离开过度
  transition: all 2.5s ease;
  transform: rotate(360);
}

.fade-leave-to {
  // 离开完成
  width: 20px;
  height: 20px;
}

.appear-from {
  width: 0;
  height: 0;
}
.appear-active {
  transition: all 2.5s ease;
}
.appear-to {
  width: 200px;
  height: 200px;
}

.wraps {
  display: flex;
  flex-wrap: wrap;
  width: calc(20px * 10 + 10px); // 整个父级的宽度,合理换行
  .item {
    width: 20px;
    height: 20px;
    border: 1px solid #ccc;
    list-style-type: none;
    display: flex;
    justify-content: center;
    align-items: center;
  }
}
.group_move {
  transition: all 0.8s ease;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux】当前进展

驱动层日志添加了下文件目录&#xff0c;函数&#xff0c;代码行的打印&#xff08;这里要小心&#xff0c;驱动目录源代码打印日志里边添进程号可能有问题&#xff0c;因为在驱动初始化的时候&#xff0c;内核还没有创建进程&#xff0c;不过猜测可以先不打印进程相关信息&…

python使用vscode 所需插件

1、导读 环境&#xff1a;Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 背景&#xff1a;换系统需要重新安装&#xff0c;避免后期忘记&#xff0c;此处记录一下啊 事件&#xff1a;20240921 说明&#xff1a;记录&#xff0c;方便后期自己查找 2、插件…

Ansys Zemax | 如何使用琼斯矩阵表面

附件下载 联系工作人员获取附件 概览 琼斯矩阵 (Jones Matrix) 表面是一种非常简便的定义偏振元件的方法。这篇文章通过几个示例介绍了如何使用琼斯矩阵。 介绍 光线追迹程序一般只考虑光线的几何属性&#xff08;位置、方向和相位&#xff09;。光线传播到一个表面时的全…

SQL - 进阶语法(二)约束

1. SQL约束 约束用于约束表中的数据规则&#xff0c;如若存在违反行为&#xff0c;行为会被约束终止。 • NOT NULL 确保列不能有NULL值 如果添加一行新的数据&#xff0c;不能有null值&#xff0c;否则无法添加 新建表格 CREATE TABLE new_table( ID int NOT NULL, NAME …

梯形区域分解实现避障路径规划全覆盖路径规划

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言&#xff08;1&#xff09;功能&#xff08;2&#xff09;算法&#xff08;3&#xff09;参考链接&#xff08;4&#xff09;…

【服务器第二期】mobaxterm软件下载及连接

【服务器第二期】mobaxterm软件下载及连接 前言什么是SSH什么是FTP/SFTP mobaxterm软件介绍mobaxterm软件下载SSH登录使用方法1-新建ssh连接方法2-打开已有的ssh连接方法3-通过ssh命令建立连接 SFTP数据传输方法1-建立ssh连接后直接拖拽方法2-建立sftp连接再拖拽方法3-直接使用…

Nacos配置管理(2)-----配置热更新

有很多的业务相关参数&#xff0c;将来可能会根据实际情况临时调整。例如购物车业务&#xff0c;购物车数量有一个上限&#xff0c;默认是10&#xff0c;对应代码如下&#xff1a; 现在这里购物车是写死的固定值&#xff0c;我们应该将其配置在配置文件中&#xff0c;方便后期…

while(cin>>a)

while(cin>>a)要结束输入CTRLZ换行 输入先调用&#xff1a; istream& operator>> (istream& is, string& str); 但返回值类型时istream&#xff0c; 再调用&#xff1a; 重载的原为(bool)istream&#xff0c;返回值为bool,重载的为括号&#xff0c…

若依前后端分离版项目电子证书查询系统部署到Linux生产环境

项目背景&#xff1a;这个项目之前是PHP语言开发的&#xff0c;采用MVC混编的&#xff0c;前端用Layui框架后端用ThinkPHP8.0框架。客户要求给改成Java语言的&#xff0c;就选用了若依前后端分离低代码版。本地开发调试没有问题&#xff0c;就记录下整个项目上线过程。 服务器背…

How can I stream a response from LangChain‘s OpenAI using Flask API?

题意&#xff1a;怎样在 Flask API 中使用 LangChain 的 OpenAI 模型流式传输响应 问题背景&#xff1a; I am using Python Flask app for chat over data. In the console I am getting streamable response directly from the OpenAI since I can enable streming with a f…

Go语言基础学习02-命令源码文件;库源码文件;类型推断;变量重声明

命令源码文件 GOPATH指向的一个或者多个工作区&#xff0c;每个工作区都会有以代码包为基本组织形式的源码文件。 Go语言中源码文件可以分为三类&#xff1a;命令源码文件、库源码文件、测试源码文件。 命令源码文件&#xff1a; 命令源码文件是程序的运行入口&#xff0c;是每…

k8s技术

---------------第一部分---------------------- 一.应用部署方式 1.传统部署&#xff1a;直接部署在物理机上&#xff0c;简单但是耗资 2.虚拟化部署&#xff1a;一台物理机上面有多个虚拟机&#xff0c;提供了虚拟机间一定的安全&#xff0c;但是增加了操作系统&#xff0c;…

【C++】STL----deque

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;C从小白到高手 &#x1f339;往期回顾&#x1f339;&#xff1a;【C】STL----stack和queue常见用法 &#x1f516; 流水不争&#xff0c;争的是滔滔不息。 文章目录 一…

某花顺爬虫逆向分析

目标网站&#xff1a; aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v 一、抓包分析 携带了cookie&#xff0c;每次请求的cookie都不一样&#xff0c;且不携带cookie不能成功返回数据 hook Cookie代码 _cookie document.cookie Object.defineProperty(document, cookie, {get(){con…

前端框架的选择和对比

前端框架的选择取决于项目的具体需求、团队的技术栈以及长期的技术规划。以下是几个主流前端框架的对比和选择建议&#xff1a; 1. React 特点: 由Facebook开发&#xff0c;基于组件化的设计思想&#xff0c;使用JSX语法&#xff0c;数据流单向&#xff0c;生态系统丰富。适用…

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对

Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对的问题 解决办法 出现 Oracle Library is not loaded 错误提示&#xff0c;通常是因为 Navicat 无法找到或加载 Oracle 客户端库&#xff08;OCI.dll&#xff09;。要解决这个问题&#x…

解释器模式:将语法规则与执行逻辑解耦

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了评估语言的语法或表达式的方式。该模式通过定义一个语言的文法表示&#xff0c;并通过解释这些表示来执行相应的操作。 解释器模式主要用于设计一种特定类型的计算机语言或表达式…

openEuler系统安装内网穿透工具实现其他设备公网环境远程ssh连接

目录 前言 1. 本地SSH连接测试 2. openEuler安装Cpolar 3. 配置 SSH公网地址 4. 公网远程SSH连接 5. 固定连接SSH公网地址 6. SSH固定地址连接测试 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊openEuler系统安装内网穿透工具实现其他…

3D生成技术再创新高:VAST发布Tripo 2.0,提升AI 3D生成新高度

随着《黑神话悟空》的爆火&#xff0c;3D游戏背后的AI 3D生成技术也逐渐受到更多的关注。虽然3D大模型的热度相较于语言模型和视频生成技术稍逊一筹&#xff0c;但全球的3D大模型玩家们却从未放慢脚步。无论是a16z支持的Yellow&#xff0c;还是李飞飞创立的World Labs&#xff…

通过FUXA在ARMxy边缘计算网关上实现生产优化

在当今工业4.0时代&#xff0c;智能制造的需求日益增长&#xff0c;企业迫切需要通过数字化转型来提高生产效率、降低成本并增强市场竞争力。ARMxy系列的BL340工业级ARM控制器&#xff0c;凭借其强大的处理能力和灵活的配置选项&#xff0c;成为实现生产优化的重要基础。 一、…