【VueUse】超越基本功能的高级 Vue 元素操作

在vue开发中我们经常需要操作DOM元素,从简单的添加类到动态创建元素,这些操作都是不可避免的。而在VueUse库中,Elements相关API函数为我们提供了一系列强大而灵活的工具,帮助我们更轻松地处理DOM元素。无论是优雅地处理元素、动态渲染元素还是简化复杂的DOM操作,VueUse Elements都能够成为您的得力助手。

        在本文将带您深入探索VueUse Elements,揭示其背后的神秘面纱,并展示如何利用这些强大的API函数提升您的Vue项目至新的高度。让我们一起踏上这场关于VueUse Elements的探索之旅吧!

目录

useActiveElement(跟踪焦点元素)

useDocumentVisibility(跟踪文档可见状态)

useDraggable(拖拽元素)

useDropZone(拖放区域)

useElementBounding(响应边界数据)

useElementSize(获取指定元素宽高)

useResizeObserver(监听元素内容和边框尺寸变化)

useElementVisibility(跟踪元素可见性)

useIntersectionObserver(指定元素交集变化)

useMouseInElement(跟踪鼠标指定元素状态)

useMutationObserver(监听DOM树修改)

useWindowFocus(跟踪窗口焦点)

useWindowScroll(获取窗口的滚动位置)

useWindowSize(获取窗口尺寸)

最后总结


useActiveElement(跟踪焦点元素)

响应式 document.activeElement。什么意思呢?就是跟踪文档中当前处于焦点的元素。具体来说,useActiveElement函数会返回一个Ref对象,该对象的值为当前处于焦点的元素。这意味着,当用户在页面上点击、输入或以其他方式与页面交互时,useActiveElement将提供当前活动元素的信息。如下:

<template><input v-for="i in 6" :key="i" type="text" :data-id="i" :placeholder="`${i}`"><br>当前聚焦的元素:{{ key }}
</template><script setup lang="ts">
import { watch, computed } from 'vue'
import { useActiveElement } from '@vueuse/core'const activeElement = useActiveElement()
const key = computed(() => activeElement.value?.dataset?.id || 'null')watch(activeElement, (el) => {console.log(activeElement.value?.dataset)
})
</script>

最终得到的结果如下:

useDocumentVisibility(跟踪文档可见状态)

响应式跟踪 document.visibilityState。什么意思呢?就是跟踪文档的可见性状态,允许开发者监测页面是否处于可见状态,从而可以根据不同的可见性状态来执行相应的操作。例如,在开发通知系统或者数据同步功能时,可以利用useDocumentVisibility函数来检测用户是否正在浏览页面,从而决定是否发送通知或执行数据同步操作,以避免在用户不可见时造成不必要的打扰或消耗额外的资源。如下:

<template><div class="use-document-visibility">{{ hello }}</div>
</template><script lang="ts" setup>
import { ref, watch } from 'vue'
import { useDocumentVisibility } from '@vueuse/core'const visibility = useDocumentVisibility()const hello = ref('最小化页面或切换标签然后返回!')
watch(visibility, (current, previous) => {if (current === 'visible' && previous === 'hidden') {hello.value = '欢迎回家!'}
})
</script>

最终得到的结果如下:

useDraggable(拖拽元素)

使元素可拖拽。什么意思呢?就是使元素能够响应拖拽操作,允许开发者将其应用于某个元素,从而使该元素具有拖拽功能。一旦应用了该函数,用户便可以通过鼠标或触摸屏对元素进行拖拽操作,移动元素到所需位置。如下:

<template><div class="use-draggable" ref="el" :style="style" style="position: fixed;"><div class="title">标题</div>我的位置:{{ x }}, {{ y }}</div>
</template><script setup lang="ts">
import { ref } from 'vue'
import { useDraggable } from '@vueuse/core'const el = ref(null)
const { x, y, style } = useDraggable(el, {initialValue: { x: 40, y: 40 }, // 初始位置})
</script><style scoped lang="scss">
.use-draggable {border: 1px solid #e5e5e5;border-radius: 4px;background: #fff;color: #333;padding: 10px 20px;.title {line-height: 32px;font-size: 14px;font-weight: bold;}
}
</style>

最终得到的结果如下:

useDropZone(拖放区域)

创建一个可以放置文件的区域。什么意思呢?就是让一个元素成为“拖放区域”,从而可以接收用户拖放的文件或其他数据。这个区域可以接收用户从文件系统或其他来源拖放过来的内容。通过这个函数,你可以监听各种拖放相关的事件,比如当用户开始拖拽、拖拽进入区域、拖拽在区域内移动以及拖放操作完成等。场景应用于文件上传组件、拖放式接口、图片管理工具等。如下:

<template><div ref="dropZoneRef" class="drop-zone" :class="{ 'over': isOverDropZone }">拖拽文件到这个地方 {{ isOverDropZone }}</div><ul v-if="state.name"><li>{{ state.name }}</li><li>{{ state.size }}</li><li>{{ state.type }}</li></ul><img src="./assets/1.jpg" alt="" style="width: 100px; height: 100px;">
</template><script lang="ts" setup>
import { ref, reactive } from 'vue'
import { useDropZone } from '@vueuse/core'const dropZoneRef = ref<HTMLDivElement>()
let state = reactive({}) as anyfunction onDrop(files: any) {state = files[0]console.log(state)
}
const { isOverDropZone } = useDropZone(dropZoneRef, onDrop)
</script><style>.drop-zone {width: 500px;border: 2px dashed #ccc;padding: 20px;text-align: center;}.drop-zone.over {background-color: #f0f0f0;}
</style>

最终得到的结果如下:

useElementBounding(响应边界数据)

让HTML元素的bounding box 响应式。什么意思呢?就是可以获取指定元素的位置、宽度、高度等边界信息。这对于实现响应式布局或者对元素进行定位、动画等操作非常有用。当元素的边界发生变化时(例如窗口大小变化导致元素位置或尺寸变化),相关的响应式数据也会自动更新,从而保持界面的同步性。这里我们搭配上文讲解到的拖拽元素的API一起使用,如下:

<template><div ref="el" class="use-element-bounding" :style="style" style="position: fixed;">位置信息:<br />x: {{ x }}<br />y: {{ y }}<br />top: {{ top }}<br />left: {{ left }}<br />right: {{ right }} <br />bottom: {{ bottom }}<br />width: {{ width }}<br/>height: {{ height }}<br/></div>
</template><script lang="ts" setup>
import { ref } from 'vue'
import { useElementBounding, useDraggable } from '@vueuse/core'const el = ref(null)const { x, y, style } = useDraggable(el, {initialValue: { x: 40, y: 40 }, // 初始位置
})const { top, right, bottom, left, width, height } = useElementBounding(el, {reset: true, // 组件卸载时重置边界信息windowResize: true, // 监听窗口大小调整事件windowScroll: true, // 监听窗口滚动事件immediate: true, // 组件挂载时立即调用
})
</script><style scoped>
.use-element-bounding {background: #e5e5e5;border: 1px solid #ccc;padding: 10px;border-radius: 4px;width: 200px;height: 200px;color: #333;user-select: none;
}
</style>

最终得到的结果如下:

useElementSize(获取指定元素宽高)

元素尺寸大小响应式。什么意思呢?就是获取指定元素的宽度和高度,这对于布局和样式计算非常有用。基于元素的尺寸信息,你可以根据需要动态地调整布局和样式。例如,可以根据元素的宽度和高度选择合适的样式或者调整其他元素的位置和大小。如下:

<template><div>width: {{ width }}<br>height: {{ height }}</div><textarea ref="el" class="use-element-size"></textarea>
</template><script lang="ts" setup>
import { ref } from 'vue'
import { useElementSize } from '@vueuse/core'const el = ref(null)
const { width, height } = useElementSize(el)
</script><style scoped>
.use-element-size {background: #e5e5e5;border: 1px solid #ccc;padding: 10px;border-radius: 4px;width: 200px;height: 200px;color: #333;
}
</style>

最终得到的结果如下:

useResizeObserver(监听元素内容和边框尺寸变化)

监听元素内容和边框尺寸的变化。什么意思呢?就是用于观察指定元素的大小变化,并在大小变化时执行相应的回调函数。如下:

<template><div>{{ text }}</div><textarea class="use-resize-observer" ref="el"></textarea>
</template><script lang="ts" setup>
import { ref } from 'vue'
import { useResizeObserver } from '@vueuse/core'const el = ref(null)
const text = ref('')useResizeObserver(el, (entries) => {const entry = entries[0]const { width, height } = entry.contentRecttext.value = `width: ${width}, height: ${height}`
})
</script><style>
.use-resize-observer {width: 200px;height: 200px;background: #ccc;
}
</style>

最终得到的结果如下: 

useResizeObserver 和 useElementSize 都是 VueUse 中用于监测元素大小变化的函数,但它们之间有一些区别

实现原理

1)useElementSize 则是通过监听 window 的 resize 事件以及元素的 scroll 事件,并结合获取元素的 clientWidth 和 clientHeight 属性来计算元素的大小变化。

2)useResizeObserver 使用的是 Resize Observer API,它能够在元素大小变化时立即触发回调函数。
浏览器支持

1)useElementSize 的实现方式则更依赖于浏览器的 resize 和 scroll 事件,可能存在一些兼容性问题。
2)Resize Observer API 的支持程度较高,大多数现代浏览器都支持。

精确度

由于 Resize Observer API 是专门用于监测元素大小变化的 API,因此在性能和精确度上可能会优于通过 resize 和 scroll 事件计算大小的方法。

使用场景

1)如果你的项目需要考虑到一些老版本浏览器的兼容性,并且对性能要求不是特别高,可以考虑使用 useElementSize。

2)如果你需要在元素大小变化时立即触发回调函数,并且希望在现代浏览器中使用,则可以选择 useResizeObserver。

综上所述

useResizeObserver 更适合现代化的项目,并且提供了更好的性能和精确度,而 useElementSize 则更适合需要考虑兼容性和性能要求不那么严格的项目。

useElementVisibility(跟踪元素可见性)

跟踪元素在视口中的可见性。什么意思呢?就是用于检测元素的可见性,可以帮助你监听指定元素的可见状态,即当元素进入或离开视窗时,相关的可见性状态会被更新。通过检测元素的可见性,你可以延迟加载页面中的图片、视频或其他资源,从而提高页面的加载性能和用户体验。当元素进入视窗时,再开始加载相应的内容。

举个经典的例子,当你电脑浏览b站视频的时候,你想刷一下评论区,当你鼠标滚动,原本的视频离开可视窗口的那一瞬间,右下角会给你打开一个小窗口,当你回到原本的视频窗口后,小窗口就会消失,就是这个道理!

案例代码如下:

<template><div class="use-element-visiblity"><div ref="target" class="target">向下滚动到可视区域</div><div class="tips-zone">提示内容{{ targetIsVisible }}</div></div>
</template><script lang="ts" setup>
import { ref } from 'vue'
import { useElementVisibility } from '@vueuse/core'const target = ref(null)
const targetIsVisible = useElementVisibility(target)
</script><style scoped lang="scss">
.use-element-visiblity {height: 100%;height: 200vh;background-color: #eee;.target {width: 200px;height: 200px;background-color: red;}.tips-zone {position: fixed;bottom: 20px;right: 20px;z-index: 9;border: 2px dashed #ccc;padding: 20px;}
}
</style>

最终得到的结果如下:

useIntersectionObserver(指定元素交集变化)

响应式监听目标元素的可见性。什么意思呢?就是监听指定元素与其祖先元素或视窗的交集变化。当元素进入或离开视窗,或者与祖先元素的交集变化时,相关的回调函数会被触发。如下:

<template><div class="use-intersection-observer"><div class="box"><div class="p1">向下滚动</div><div class="p2" ref="target">监听可视区域内容</div><div class="p3">最底部</div></div><div class="tip">元素在窗口内 {{ targetIsVisible }}</div></div>
</template><script lang="ts" setup>
import { ref } from 'vue'
import { useIntersectionObserver } from '@vueuse/core'const target = ref(null)
const targetIsVisible = ref(false)
const { stop } = useIntersectionObserver(target,([{ isIntersecting }], observerElement) => {targetIsVisible.value = isIntersecting}
)
</script><style scoped lang="scss">
.use-intersection-observer {width: 500px;.box {border: 2px dashed #ccc;height: 100px;overflow-y: auto;padding: 20px;.p1, .p3 {padding: 30px;}.p2 {margin-top: 100px;}}
}
</style>

最终得到的结果如下:

useMouseInElement(跟踪鼠标指定元素状态)

响应式获取鼠标相对于元素的位置。什么意思呢?就是用于跟踪鼠标在指定元素内的位置和状态,实时获取鼠标相对于指定元素的位置信息,包括水平和垂直方向的坐标,通过实时追踪鼠标在元素内的位置和状态,可以为用户提供更加灵活、智能的交互体验,从而增强用户对网页或应用的满意度。如下:

<template><div ref="el" class="use-mouse-in-element"><div ref="target" class="content">相对内容</div>位置信息:<br />x: {{ x }}<br />y: {{ y }}<br />sourceType: {{ sourceType }}<br />elementX: {{ elementX }}<br />elementY: {{  elementY }}<br />elementPositionX: {{ elementPositionX }}<br />elementPositionY: {{ elementPositionY }}<br />elementHeight: {{ elementHeight }}<br />elementWidth: {{  elementWidth }}<br />isOutside: {{  isOutside }}<br /></div>
</template><script lang="ts" setup>
import { ref } from 'vue'
import { useMouseInElement } from '@vueuse/core'const target = ref(null)
const { x, y, sourceType, elementX, elementY, elementPositionX, elementPositionY, elementHeight, elementWidth, isOutside 
} = useMouseInElement(target)
</script><style scoped lang="scss">
.use-mouse-in-element {background: #e5e5e5;border: 1px solid #ccc;padding: 10px;border-radius: 4px;width: 400px;color: #333;.content {color: #fff;background: #ddd;padding: 40px;}
}
</style>

最终得到的结果如下:

useMutationObserver(监听DOM树修改)

监听DOM树修改。什么意思呢?就是用于观察指定元素及其子元素的 DOM 变化,并在发生变化时执行相应的回调函数。如下:

<template><div><h2>DOM元素监视器</h2><div ref="targetElement">监视的元素</div><button @click="changeElement">改变元素</button>{{ messages }}</div>
</template><script lang="ts" setup>
import { ref } from 'vue'
import { useMutationObserver } from '@vueuse/core'const targetElement = ref()
const messages = ref<any[]>([])useMutationObserver(targetElement, (mutations) => {console.log('DOM元素发生变化:', mutations)if (mutations[0])  messages.value.push(mutations[0].attributeName) 
}, 
{ attributes: true });// 改变DOM元素的内容
const changeElement = () => targetElement.value.style.color = 'red'
</script>

最终得到的结果如下: 

useWindowFocus(跟踪窗口焦点)

使用 window.onfocus 和 window.onblur 事件响应式跟踪窗口焦点。什么意思呢?就是实时监测浏览器窗口的焦点状态,即浏览器窗口是处于激活状态(获得焦点)还是非激活状态(失去焦点)。如下:

<template><div>{{ message }}</div>
</template><script setup lang="ts">
import { ref, watch } from 'vue'
import { useWindowFocus } from '@vueuse/core'const startMessage = '💡单击文档之外的某个位置以取消聚焦。'
const message = ref(startMessage)
const focused = useWindowFocus()watch(focused, (isFocused) => {if (isFocused)message.value = startMessageelsemessage.value = 'ℹ 选项卡未聚焦'
})
</script>

最终得到的结果如下: 

useWindowScroll(获取窗口的滚动位置)

响应式获取窗口的滚动位置。什么意思呢?就是实时监测浏览器窗口的滚动位置,包括水平和垂直方向上的滚动距离,通过监听窗口的滚动事件,你可以实现一些响应式的效果,例如根据用户滚动位置展示或隐藏导航栏、懒加载页面内容、实现无限滚动加载等。如下:

<template><div class="showTip">滚动值:<br>X轴{{ x }} - y轴{{ y }}</div><div class="windowScroll"></div>
</template><script setup lang="ts">
import { useWindowScroll } from '@vueuse/core'
const { x, y } = useWindowScroll()
</script><style scoped lang="scss">
.showTip {width: 120px;height: 50px;background: #008c8c;position: fixed;bottom: 20px;right: 20px;
}
.windowScroll {width: 10000px;height: 200vh;background: #eee;
}
</style>

最终得到的结果如下: 

useWindowSize(获取窗口尺寸)

响应式获取窗口尺寸。什么意思呢?就是用于获取浏览器窗口的尺寸信息,通过监听窗口大小变化事件,你可以实现一些响应式的布局或样式,确保页面在不同设备或窗口尺寸下都能够正确展示。如下:

<template><div class="use-window-size">width: {{ width }}, height: {{ height }}</div>
</template><script lang="ts" setup>
import { useWindowSize } from '@vueuse/core'const { width, height } = useWindowSize()
</script>

最终得到的结果如下: 

最后总结

useActiveElement:监测和响应用户与页面的交互,自动聚焦输入框或执行验证操作。

useDocumentVisibility:管理页面的可见性状态,优化用户体验和应用程序性能。

useDraggable:实现元素的拖拽功能,从而增强了应用程序的交互性和可用性。

useDropZone:在 Vue 应用中实现拖放区域,从而提升应用的交互性和用户体验。

useElementBounding:获取和管理元素的边界信息,处理元素相关的操作和交互。

useElementSize:响应式的方式获取和管理元素的尺寸信息,处理元素相关的操作和交互。

useResizeObserver:监测元素大小的变化,并实时响应变化。

useElementVisibility:监测和响应元素的可见性变化,实现与可见性相关的功能和优化。

useIntersectionObserver:实现在元素可见状态变化时自动更新相关的界面内容或状态。

useMouseInElement:追踪和监测鼠标在指定元素内的位置和状态。

useMutationObserver:监测 DOM 变化,并实时响应变化。

useWindowFocus:监测浏览器窗口的焦点状态,实现一些交互效果改善用户体验。

useWindowScroll:实时监听浏览器窗口的滚动事件,实现一些响应式效果。

useWindowSize:实时获取和响应浏览器窗口的尺寸信息,实现响应式布局。

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

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

相关文章

JavaEE技术之MySql高级(索引、索引优化、sql实战、View视图、Mysql日志和锁、多版本并发控制)

文章目录 1. MySQL简介2. MySQL安装2.1 MySQL8新特性2.2 安装MySQL2.2.1 在docker中创建并启动MySQL容器&#xff1a;2.2.2 修改mysql密码2.2.3 重启mysql容器2.2.4 常见问题解决 2.3 字符集问题2.4 远程访问MySQL(用户与权限管理)2.4.0 远程连接问题1、防火墙2、账号不支持远程…

从永远到永远-和弦-挂留和弦

挂留和弦 1.概念2.指型1.Xsus2和弦2.Xsus4和弦 3.应用 1.概念 该篇说下和弦中的“渣男”、“绿茶”&#xff0c;挂留和弦。 挂留&#xff08;suspended&#xff09;和弦是将三和弦的三音替换成大二度或纯四度音形成的&#xff0c;包括挂留二和弦、挂留四和弦两种。 三音是一个…

手撕vector的模拟实现

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

JDK14特性

JDK14 1 概述2 语法层面的变化1_instanceof的模式匹配(预览)2_switch表达式(标准)3_文本块改进(第二次预览)4_Records 记录类型(预览 JEP359) 3 API层面的变化4 关于GC1_G1的NUMA内存分配优化2_弃用SerialCMS,ParNewSerial Old3_删除CMS4_ZGC on macOS and Windows 4 其他变化1…

自学Redis7入门篇一

自学Redis7入门篇一 Redis概述一、Redis是什么&#xff1f;二、Redis能干什么&#xff1f;三、去哪里下四、Redis安装配置五、Redis 10数据类型1.字符串(String)2.列表(List)3.哈希表(Hash)4.集合(Set)5.有序集合(ZSet)6.地理空间(GEO)7.基数统计(HyperLogLog)8.位图(bitmap)9.…

计算机毕业设计PHP+vue体检预约管理系统d1yu38

防止在使用不同数据库时&#xff0c;由于底层数据库技术不同造成接口程序紊乱的问题。通过本次系统设计可以提高自己的编程能力&#xff0c;强化对所学知识的理解和运用 本系统是一个服务于医院先关内容的网站&#xff0c;在用户打开网站的第一眼就要明白网站开发的目的&#x…

01.本地工作目录、暂存区、本地仓库三者的工作关系

1.持续集成 1.持续集成CI 让产品可以快速迭代&#xff0c;同时还能保持高质量。 简化工作 2.持续交付 交付 3.持续部署 部署 4.持续集成实现的思路 gitjenkins 5.版本控制系统 1.版本控制系统概述2.Git基本概述3.Git基本命令 2.本地工作目录、暂存区、本地仓库三者的工作关系…

[数据结构]———归并排序

具体代码&#xff1a;在gitee仓库&#xff1a;登录 - Gitee.com 目录 ​编辑 1.基本思想&#xff1a; 2. 代码解析 1.分析 2.逻辑图 3.运行结果 1.基本思想&#xff1a; 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分…

算法打卡day40

今日任务&#xff1a; 1&#xff09;139.单词拆分 2&#xff09;多重背包理论基础&#xff08;卡码网56携带矿石资源&#xff09; 3&#xff09;背包问题总结 4&#xff09;复习day15 139单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; …

Pytorch学习笔记——TensorBoard的初使用

1、TensorBoard介绍 TensorBoard是TensorFlow的可视化工具&#xff0c;但它也可以与PyTorch结合使用。TensorBoard提供了一个Web界面&#xff0c;可以展示你训练过程中的各种信息&#xff0c;如损失值、准确度、权重分布等&#xff0c;更好地帮助开发者理解和调试模型。 Tenso…

huggingface里如何查看具体任务的评估指标

如果我们在做一个模型训练任务的时候&#xff0c;可能会不知道这个任务在评估的时候使用什么指标&#xff0c;那么huggingface里边为我们提供了参考&#xff1a; 下面就来看看吧&#xff1a; https://huggingface.co/https://huggingface.co/ 点击"Docs"&#xff…

【算法】【单调栈】【leetcode】1019. 链表中的下一个更大节点

刷这题之前先看&#xff1a; 【算法】【OD算法】【单调栈】找朋友-CSDN博客 【算法】【单调栈】【leetcode】1475. 商品折扣后的最终价格-CSDN博客 【算法】【单调栈】【leetcode】901. 股票价格跨度-CSDN博客 【算法】【单调栈】每日温度-CSDN博客 题目地址&#xff1…

嵌入式硬件中PCB走线与过孔的电流承载能力分析

简介 使用FR4敷铜板PCBA上各个器件之间的电气连接是通过其各层敷着的铜箔走线和过孔来实现的。 由于不同产品、不同模块电流大小不同,为实现各个功能,设计人员需要知道所设计的走线和过孔能否承载相应的电流,以实现产品的功能,防止过流时产品烧毁。 文中介绍设计和测试FR4敷…

iOS分享弹窗

klkxxy/分享菜单弹窗

抖音视频0粉营销推广墙纸,当日收益,第二天提现,日入300

项目简介&#xff1a; 这个项目非常易于执行&#xff0c;主要涉及在抖音平台上分享爱国主题的壁纸&#xff0c;并通过推广相关的小程序来实现盈利。 下 载 地 址 &#xff1a; laoa1.cn/1849.html 项目操作简便&#xff0c;一般只需花费1个小时即可完成&#xff0c;一旦掌…

408数据结构-二叉树的概念、性质与存储结构 自学知识点整理

前置知识&#xff1a;树的基本概念与性质 二叉树的定义 二叉树是一种特殊的树形结构&#xff0c;其特点是每个结点至多只有两棵子树&#xff08;即二叉树中不存在度大于 2 2 2的结点&#xff09;&#xff0c;并且二叉树是有序树&#xff0c;左右子树不能互换。 与树类似&#…

探索和构建 LLaMA 3 架构:深入探讨组件、编码和推理技术(三)KV缓存

探索和构建 LLaMA 3 架构&#xff1a;深入探讨组件、编码和推理技术&#xff08;三&#xff09; KV缓存 在推理的每一步中&#xff0c;只对模型输出的最后一个标记感兴趣&#xff0c;因为已经有了之前的标记。然而&#xff0c;模型需要访问所有先前的标记来决定输出哪个标记&…

07 - 步骤 javaScript代码

简介 JavaScript 代码是通过 JavaScript 脚本步骤来执行 JavaScript 脚本的一种方式。这允许用户在 Kettle 的数据流程中使用 JavaScript 编写自定义的脚本逻辑&#xff0c;用于数据处理、转换、计算等操作。 使用 场景 我需要在数据流加一个字段 createTime 当前时间&…

《有限元分析及应用》《有限元分析基础教程》-曾攀-清华大学|pdf电子书+有限元分析及应用视频教程(全85讲) 曾攀、雷丽萍 ​​​+课件PPT

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

找不到msvcr110.dll的多种解决方法,轻松解决dll问题

在日常使用计算机的时候&#xff0c;突然提示&#xff1a;“由于找不到msvcr110.dll&#xff0c;无法继续执行代码”。这个错误通常发生在运行某些程序时&#xff0c;系统无法找到所需的动态链接库文件。这个问题可能会给用户带来困扰&#xff0c;但是不用担心&#xff0c;下面…