02Cesium中常用的鼠标事件

news2024/9/30 7:04:06

文章目录

  • 02Cesium中常用的鼠标事件
    • 1、左键单击事件
    • 2、左键双击事件
    • 3、左键按下事件
    • 4、左键弹起事件
    • 5、中键按下事件
    • 6、中键弹起事件
    • 7、鼠标移动事件
    • 8、右键单击事件
    • 9、右键按下事件
    • 10、右键弹起事件
    • 11、鼠标滚轮事件
    • 具体在代码中的应用如下所示

02Cesium中常用的鼠标事件

Cesium中常用的鼠标事件有左键单击事件、左键双击事件、左键按下事件、左键弹起事件、中键按下事件、中键弹起事件、鼠标移动事件、右键单击事件、右键按下事件、右键弹起事件、鼠标滚轮事件。注意:是没有鼠标右键双击事件的说法的。这里只是涉及到鼠标对应事件的API用法,记录一下常用的鼠标事件,至于具体在场景中的应用,如屏幕坐标与经纬度的转换,鼠标点击获取经纬度等,看后续文章。

1、左键单击事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('左键单击事件:',click.position);   
},Cesium.ScreenSpaceEventType.LEFT_CLICK);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);

2、左键双击事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('左键双击事件:',click.position);   
},Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);

3、左键按下事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('左键按下事件:',click.position);   
},Cesium.ScreenSpaceEventType.LEFT_DOWN);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN);

4、左键弹起事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('左键弹起事件:',click.position);   
},Cesium.ScreenSpaceEventType.LEFT_UP);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP);

5、中键按下事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
   console.log('中键按下事件:',click.position);   
},Cesium.ScreenSpaceEventType.MIDDLE_DOWN);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_DOWN);

6、中键弹起事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('中键弹起事件:',click.position);   
},Cesium.ScreenSpaceEventType.MIDDLE_UP);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_UP);

7、鼠标移动事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(movement){
  console.log('移动事件:',movement.endPosition);   
},Cesium.ScreenSpaceEventType.MOUSE_MOVE);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE);

8、右键单击事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('右键单击事件',click.position);   
},Cesium.ScreenSpaceEventType.RIGHT_CLICK);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK);

9、右键按下事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('右键按下事件',click.position);   
},Cesium.ScreenSpaceEventType.RIGHT_DOWN);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_DOWN);

10、右键弹起事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(click){
  console.log('右键弹起事件',click.position);   
},Cesium.ScreenSpaceEventType.RIGHT_UP);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_UP);

11、鼠标滚轮事件

var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function(wheelment){
  console.log('滚轮事件:',wheelment);   
},Cesium.ScreenSpaceEventType.WHEEL);

// 移除鼠标事件
handler.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL);

具体在代码中的应用如下所示

在对应vue中的代码如下所示,可以先看后面的截图,然后结合截图看代码相关的内容。对应的项目地址:https://gitee.com/the-world-keeps-blooming/my-vite-vue-cesium

<template>
    <div style="width: 100%; height: 100%; position: relative;">
        <div id="cesiumContainer"></div>
        <div class="cesium-viewer-toolbar">
            <el-row>
                <div style="font-size: 16px;">Cesium中常用的鼠标事件</div>
            </el-row>
            <el-row style="margin-top: 16px;">
                <el-form label-width="auto" style="max-width: 600px">
                    <el-form-item label="左键单击事件:">
                        <el-button type="primary" @click="LEFT_CLICK">左键单击</el-button>
                        <el-button type="primary" @click="REMOVE_LEFT_CLICK">移除左键单击</el-button>
                    </el-form-item>
                    <el-form-item label="左键双击事件:">
                        <el-button type="primary" @click="LEFT_DOUBLE_CLICK">左键双击</el-button>
                        <el-button type="primary" @click="REMOVE_LEFT_DOUBLE_CLICK">移除左键双击</el-button>
                    </el-form-item>
                    <el-form-item label="左键按下事件:">
                        <el-button type="primary" @click="LEFT_DOWN">左键按下</el-button>
                        <el-button type="primary" @click="REMOVE_LEFT_DOWN">移除左键按下</el-button>
                    </el-form-item>
                    <el-form-item label="左键弹起事件:">
                        <el-button type="primary" @click="LEFT_UP">左键弹起</el-button>
                        <el-button type="primary" @click="REMOVE_LEFT_UP">移除左键弹起</el-button>
                    </el-form-item>
                    <el-form-item label="中键按下事件:">
                        <el-button type="primary" @click="MIDDLE_DOWN">中键按下</el-button>
                        <el-button type="primary" @click="REMOVE_MIDDLE_DOWN">移除中键按下</el-button>
                    </el-form-item>
                    <el-form-item label="中键弹起事件:">
                        <el-button type="primary" @click="MIDDLE_UP">中键弹起</el-button>
                        <el-button type="primary" @click="REMOVE_MIDDLE_UP">移除中键弹起</el-button>
                    </el-form-item>
                    <el-form-item label="鼠标移动事件:">
                        <el-button type="primary" @click="MOUSE_MOVE">鼠标移动</el-button>
                        <el-button type="primary" @click="REMOVE_MOUSE_MOVE">移除鼠标移动</el-button>
                    </el-form-item>
                    <el-form-item label="右键单击事件:">
                        <el-button type="primary" @click="RIGHT_CLICK">右键单击</el-button>
                        <el-button type="primary" @click="REMOVE_RIGHT_CLICK">移除右键单击</el-button>
                    </el-form-item>
                    <el-form-item label="右键弹起事件:">
                        <el-button type="primary" @click="RIGHT_UP">右键弹起</el-button>
                        <el-button type="primary" @click="REMOVE_RIGHT_UP">移除右键弹起</el-button>
                    </el-form-item>
                    <el-form-item label="滚轮事件:">
                        <el-button type="primary" @click="WHEEL">滚轮事件</el-button>
                        <el-button type="primary" @click="REMOVE_WHEEL">移除滚轮事件</el-button>
                    </el-form-item>
                    <el-form-item label="多个事件结合:">
                        <el-button type="primary" @click="MORE_EVENTS">多个事件</el-button>
                        <el-button type="primary" @click="REMOVE_MORE_EVENTS">移除多个事件</el-button>
                    </el-form-item>
                </el-form>
            </el-row>
            <el-row>
                <div style="font-size: 16px;">确保鼠标在地球上点击有效,这里以鼠标左键点击为例,其他以此类推</div>
            </el-row>
            <el-row style="margin-top: 16px;">
                <el-form label-width="auto" style="max-width: 600px">
                    <el-form-item label="左键单击事件:">
                        <el-button type="primary" @click="LEFT_CLICK_IN_EARTH">左键单击</el-button>
                        <el-button type="primary" @click="REMOVE_LEFT_CLICK_IN_EARTH">移除左键单击</el-button>
                    </el-form-item>
                </el-form>
            </el-row>
        </div>
    </div>
</template>

<script setup>
import { onMounted, onUnmounted } from 'vue';
import * as Cesium from 'cesium';

let viewer = null;
// const viewer = reactive(null)

// 开启鼠标监听事件
let handler = null;

/**
 * 左键单击事件
 */
const LEFT_CLICK = () => {
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('左键单击事件:', click.position);
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}

/**
 * 移除左键单击事件
 */
const REMOVE_LEFT_CLICK = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
}

/**
 * 左键双击事件
 */
const LEFT_DOUBLE_CLICK = () => {
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('左键双击事件:', click.position);
    }, Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
}

/**
 * 移除左键双击事件
 */
const REMOVE_LEFT_DOUBLE_CLICK = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK)
}

/**
 * 左键按下事件
 */
const LEFT_DOWN = () => {
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('左键按下事件:', click.position);
    }, Cesium.ScreenSpaceEventType.LEFT_DOWN);
}

/**
 * 移除左键按下事件
 */
const REMOVE_LEFT_DOWN = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN)
}

/**
 * 左键弹起事件
 */
const LEFT_UP = () => {

    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('左键弹起事件:', click.position);
    }, Cesium.ScreenSpaceEventType.LEFT_UP);
}

/**
 * 移除左键弹起事件
 */
const REMOVE_LEFT_UP = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP)
}

/**
 * 中键按下事件
 */
const MIDDLE_DOWN = () => {
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('中键按下事件:', click.position);
    }, Cesium.ScreenSpaceEventType.MIDDLE_DOWN);
}

/**
 * 移除中键弹起事件
 */
const REMOVE_MIDDLE_DOWN = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_DOWN)
}

/**
 * 中键弹起事件
 */
const MIDDLE_UP = () => {
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('中键弹起事件:', click.position);
    }, Cesium.ScreenSpaceEventType.MIDDLE_UP);
}

/**
 * 移除中键弹起事件
 */
const REMOVE_MIDDLE_UP = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_UP)
}

/**
 * 鼠标移动事件
 */
const MOUSE_MOVE = () => {
    handler.setInputAction(function (movement) {
        // 这里的movement.endPosition指的是屏幕坐标
        console.log('鼠标移动事件:', movement.endPosition);
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
}

/**
 * 移除鼠标移动事件
 */
const REMOVE_MOUSE_MOVE = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)
}

/**
 * 右键单击事件
 */
const RIGHT_CLICK = () => {
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('右键单击事件:', click.position);
    }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
}

/**
 * 移除右键单击事件
 */
const REMOVE_RIGHT_CLICK = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK)
}

/**
 * 右键弹起事件
 */
const RIGHT_UP = () => {
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('右键弹起事件:', click.position);
    }, Cesium.ScreenSpaceEventType.RIGHT_UP);
}

/**
 * 移除右键弹起事件
 */
const REMOVE_RIGHT_UP = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_UP)
}

/**
 * 滚轮事件
 */
const WHEEL = () => {
    handler.setInputAction(function (movement) {
        console.log('滚轮事件:', movement.endPosition);
    }, Cesium.ScreenSpaceEventType.WHEEL);
}

/**
 * 移除滚轮事件
 */
const REMOVE_WHEEL = () => {
    handler.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL)
}

/**
 * 多个事件结合使用
 */
const MORE_EVENTS = () => {
    // 为了防止其他事件影响,先移除所有事件
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_DOWN)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_UP)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_UP)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL)
    // 以下三个方法在绘制的时候通常都是需要结合一起使用的。
    // 鼠标左键击事件
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('左键单击事件:', click.position);
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
    // 鼠标移动事件
    handler.setInputAction(function (movement) {
        // 这里的movement.endPosition指的是屏幕坐标
        console.log('鼠标移动事件:', movement.endPosition);
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
    // 鼠标右键事件
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        console.log('右键单击事件:', click.position);
    }, Cesium.ScreenSpaceEventType.RIGHT_CLICK);
}

/**
 * 移除多个事件结合
 */
const REMOVE_MORE_EVENTS = () => {
    // 移除:鼠标左键击事件、鼠标移动事件、鼠标右键事件
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK)

}

/**
 * 确保鼠标在地球上点击有效,这里以鼠标左键点击为例,其他以此类推,左键单击事件
 */
const LEFT_CLICK_IN_EARTH = () => {

    // 为了防止其他事件影响,先移除所有事件
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOWN)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_UP)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_DOWN)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MIDDLE_UP)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.MOUSE_MOVE)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_CLICK)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.RIGHT_UP)
    handler.removeInputAction(Cesium.ScreenSpaceEventType.WHEEL)
    
    handler.setInputAction(function (click) {
        // 这里的Click.position指的是屏幕坐标
        // 保证鼠标在地球上
        var ray = viewer.camera.getPickRay(click.position)
        var position = viewer.scene.globe.pick(ray, viewer.scene)
        if (position) {
            console.log("点击了地球,鼠标在地球上,焦点坐标:", position)
        } else {
            console.log('左键单击事件,鼠标不在地球上:', click.position);
        }
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);
}

const REMOVE_LEFT_CLICK_IN_EARTH = () => {
    // 这里也可以移除对应的所有事件,但是如果没有绑定其他事件的话就没必要了移除了,其实移除其他的也不影响,还能保证不受到其他事件的影响
    handler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
}

onMounted(() => {
    // 对应的Cesium的token
    let token = '你的token'
    Cesium.Ion.defaultAccessToken = token
    viewer = new Cesium.Viewer('cesiumContainer', {
        // 搜索框
        geocoder: false,
        // home键
        homeButton: false,
        // 全屏按钮
        fullscreenButton: false,
        // 动画控件
        animation: false,
        // 场景模式选择器,就是控制二三维的那个
        sceneModePicker: false,
        // 时间轴
        timeline: false,
        // 导航帮助提示按钮
        navigationHelpButton: false,
        // 地图选择器
        baseLayerPicker: false,
    });

    handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
})

onUnmounted(() => {
    // 这个要不要都可以
    if (handler) {
        handler.destroy();
    }
    
})

</script>

<style scoped>
#cesiumContainer {
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
}

/* 隐藏底部 */
:deep(.cesium-viewer-bottom) {
    display: none !important;
}

.cesium-viewer-toolbar {
    position: absolute;
    background-color: #FFFFFF;
    width: 400px;
    height: 800px;
    top: 16px;
    left: 16px;
    padding: 16px;
}
</style>

结果如下图所示,点击的时候,F12打开浏览器的控制台,看着点击就可以了。
在这里插入图片描述

代码中还有确保鼠标在地球上点击有效,从而实现拿到的点位可以保证在地球上,这里以鼠标左键点击为例,其他以此类推。
在这里插入图片描述

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

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

相关文章

windows下安装rabbitMQ并开通管理界面和允许远程访问

如题&#xff0c;在windows下安装一个rabbitMQ server&#xff1b;然后用浏览器访问其管理界面&#xff1b;由于rabbitMQ的默认账号guest默认只能本机访问&#xff0c;因此需要设置允许其他机器远程访问。这跟mysql的思路很像&#xff0c;默认只能本地访问&#xff0c;要远程访…

《深度学习》OpenCV 图像拼接 拼接原理、参数解析、案例实现

目录 一、图像拼接 1、直接看案例 图1与图2展示&#xff1a; 合并完结果&#xff1a; 2、什么是图像拼接 3、图像拼接步骤 1&#xff09;加载图像 2&#xff09;特征点检测与描述 3&#xff09;特征点匹配 4&#xff09;图像配准 5&#xff09;图像变换和拼接 6&am…

鸿蒙harmonyos next flutter通信之BasicMessageChannel获取app版本号

本文将通过BasicMessageChannel获取app版本号&#xff0c;以此来演练BasicMessageChannel用法。 建立channel flutter代码&#xff1a; //建立通道 BasicMessageChannel basicMessageChannel BasicMessageChannel("com.xmg.basicMessageChannel",StringCodec());…

系统工程 > 霍尔三维结构

简介 霍尔三维结构模型是由美国系统工程专家霍尔&#xff08;A.D.Hall&#xff09;在1969年提出的一种系统工程方法论&#xff0c;它集中体现了系统工程方法的系统化、综合化、最优化、程序化和标准化等特点 。该模型将系统工程整个活动过程分为前后紧密衔接的七个阶段和七个步…

MySQL的驱动安装

1、下载并安装MySQL 下载地址&#xff1a; 建议在下列框中选择LTS长期支持版本&#xff0c;下载对应的MSI安装文件。 安装完成后&#xff0c;将MySQL的环境bin路径添加到环境变量中。 可以运行MySQL Configurator进行配置&#xff0c;主要设置密码&#xff0c;并初始化。其余…

机器学习课程学习周报十四

机器学习课程学习周报十四 文章目录 机器学习课程学习周报十四摘要Abstract一、机器学习部分1. EM算法与高斯混合模型2. 概率论复习&#xff08;三&#xff09; 总结 摘要 本周的学习重点是EM算法与高斯混合模型的应用。单高斯模型无法有效拟合多峰数据分布&#xff0c;因此引…

论文精读:拓扑超导体PdBi2Te4和PdBi2Te5计算

npj Computational Materials (2023) 9:188 ; https://doi.org/10.1038/s41524-023-01144-y 摘要节选 超导拓扑金属(SCTMs)近年来成为一种很有前途的量子计算拓扑超导(TSC)和马约拉纳零模式平台。 本文提出了一种通过将超导单元嵌入到拓扑绝缘体中来设计sctm的策略。还编制了…

二叉树的中序遍历(java)

概述 关于二叉树&#xff0c;我们都不陌生&#xff0c;许多基于递归的问题发起点都是一个二叉树的root节点。对于各种二叉树的问题&#xff0c;我们也是通过dfs进行求解。例如求二叉树的深度、最近公共祖先等 算法分析 关于二叉树的中序遍历&#xff0c;我们都知道应该先访…

无人机之集群路径规划篇

无人机的集群路径规划是一个复杂而重要的任务&#xff0c;它要求为一群无人机设计出既安全又高效的飞行路径&#xff0c;同时考虑到多种约束条件和目标。 一、路径规划的重要性 无人机集群路径规划对于确保无人机能够安全、高效地完成任务至关重要。通过合理的路径规划&#x…

Word办公自动化的一些方法

1.Word部分内容介绍 word本身是带有格式的一种文档&#xff0c;有人说它本质是XML&#xff0c;所以一定要充分利用标记了【样式】的特性来迅速调整【格式】&#xff0c;从而专心编辑文档内容本身。 样式&#xff08;集&#xff09; 编号&#xff08;多级关联样式编号&#xff…

企业如何提升知识产权管理效率?

随着企业规模的扩大和创新活动的增加&#xff0c;知识产权管理日益复杂。有效的知识产权管理不仅能够保护企业的创新成果&#xff0c;还能为企业带来巨大的商业价值。然而&#xff0c;许多企业在知识产权管理方面面临着效率低下的问题&#xff0c;管理效率的提升成为企业亟需解…

XSS | 存储型 XSS 攻击

关注这个漏洞的其他相关笔记&#xff1a;XSS 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;存储型 XSS —— 理论篇 存储型 XSS 又称持久型 XSS&#xff0c;攻击脚本将被永久的存放在目标服务器的数据库或文件中&#xff0c;具有很高的隐蔽性。 常见的攻击方式&#xff1a; 这种…

升级 Windows 后如何恢复丢失的文件

升级到 Windows 11 后可以恢复丢失的文件&#xff01;阅读帖子直到最后&#xff0c;了解如何做到这一点。 为了获得安全更新并使用最新的操作系统&#xff0c;人们会升级到最新版本的 Windows。然而&#xff0c;在这样做的过程中&#xff0c;许多人丢失了他们的重要文件&#…

Dynamics 365 dependency EntityType

导解决方案时经常会碰到组件依赖导致导入报错&#xff0c;而错误提示中组件只有type, 比如下图中的type 20和60, 初看之下并不知道是什么意思&#xff0c;从parentDisplayName能看出来&#xff0c;这个parent是个实体&#xff0c;但实体中的什么呢&#xff0c;目测是看不出来的…

8621 二分查找

**思路&#xff1a;** 1. 读取输入的元素个数 n。 2. 读取有序数组 ST。 3. 读取要查找的关键字 key。 4. 使用折半查找法&#xff08;即二分查找&#xff09;在数组 ST 中查找 key 的位置。 5. 如果找到 key&#xff0c;输出其位置&#xff1b;如果未找到&#xff0c;输出 &qu…

HarmonyOS/OpenHarmony 离线加载web资源,并实现web资源更新

关键词&#xff1a;h5离线包加载、h5离线包更新、沙箱 在上一篇文章中&#xff0c;我们已经介绍了如何将 rawfile 资源文件中的文件数据拷贝到沙箱下&#xff0c;那么该篇文章将介绍如何加载该沙箱目录下的文件资源&#xff08;此处以打包后的web资源为例&#xff09;&#xf…

5.模拟电子技术笔记——放大电路的分析方法

写在前面 这个是模电的第五次笔记&#xff0c;祝大家学习愉快&#xff01; 笔记部分 1.图解法 我们这节的所有电路都默认是共射放大电路&#xff0c;后面如果没有特殊说明都是共射极的。 1.1 静态工作点的图解分析 我们接下来画出这个电路的直流回路 我们先考察它的输入回…

【redis-04】Redisson实现分布式锁实战和源码剖析

redis系列整体栏目 内容链接地址【一】redis基本数据类型和使用场景https://zhenghuisheng.blog.csdn.net/article/details/142406325【二】redis的持久化机制和原理https://zhenghuisheng.blog.csdn.net/article/details/142441756【三】redis缓存穿透、缓存击穿、缓存雪崩htt…

ubuntu切换源方式记录(清华源、中科大源、阿里源)

文章目录 前言一、中科大源二、清华源三、阿里源 前言 记录ubunut切换各个源的方式。 备注&#xff1a;更换源之后使用sudo apt-get update更新索引。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、中科大源 地址&#xff1a;https://mirrors.u…

【Golang】Go语言字符串处理库--strings

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…