当前位置: 首页 > news >正文

jQuery小游戏(二)

jQuery小游戏(二)

今天是新年的第二天,本人在这里祝大家,新年快乐,万事胜意💕

紧接jQuery小游戏(一)的内容,我们开始继续往下咯😜

  1. 游戏中使用到的方法
  • keydown:当键盘按下时,立刻被触发;如果按住不放的话,会重复触发此事件,keydown()方法的参数是回调函数,当keydown事件触发时运行回调函数。一般keydownkeyup配合使用,下面会讲到keyup,说到keydown,我们会联想到另外一个事件keypress(当用户按下键盘上的字符键时触发,如果按住不让的话,会重复触发此事件),发生keypress事件意味着按下的键会影响到屏幕中文本的显示
  • keyup:当键盘按下,再次抬起时,被触发;在发生keydownkeyup事件时,event对象的keyCode属性会包含一个代码,与键盘上的一个特定的键对应。对数字、字母键,keyCode属性的值与ASCII码中对应小写字母或者数字的编码相同

需要注意的是:这三个键盘事件依次顺序为:keydown->keypress->keyup

  • orientationchange:便于开发者进行设备的判断,是处于垂直模式还是水平模式
  • 0:表示垂直模式
  • 90:表示左转水平模式(主屏幕键在右侧)
  • -90:表示右转水平模式(主屏幕键在左侧)
    当用户旋转设备改变了模式,就会触发orientationchange事件。但 event对象上没有暴露任何有用的信息,这是因为相关信息都可以从 window.orientation属性中获取;所有iOS设备都支持orientationchange事件和window.orientation属性;因为orientationchange事件被认为是window事件,所以也可以通过给元素添加 onorientationchange 属性来指定事件处理程序
keydown: function(e) {var t = i.checkKey(e.keyCode);n.event.keyDownGo && n.event.keys[t] != undefined && (n.event.keys[t] = !0),n.event.keyUpGo && n.event.lastKey[t] != undefined && (n.event.lastKey[t] = !1),n.event.keyPressCtrl[t] && n.event.keyPressedGo && (n.event.pressedKey[t] != undefined && (n.event.pressedKey[t] = !0), n.event.keyPressCtrl[t] = !1),n.event.keyDownCallBack != null && n.event.keyDownCallBack(e),t = null},keyup: function(e) {var t = i.checkKey(e.keyCode);n.event.keyDownGo && n.event.keys[t] != undefined && (n.event.keys[t] = !1),n.event.keyUpGo && n.event.lastKey[t] != undefined && (n.event.lastKey[t] = !0),n.event.keyPressedGo && (n.event.pressedKey[t] != undefined && (n.event.pressedKey[t] = !1), n.event.keyPressCtrl[t] = !0),n.event.keyUpCallBack != null && n.event.keyUpCallBack(e),t = null},orientationchange: function(e) {n.event.orientationChange != null && n.event.orientationChange(e)},swipeStart: function(e, t) {n.event.swipeCallBack != null && (n.event.swipeDate = Date.now(), n.event.pageStarOffX = e, n.event.pageStarOffY = t)},swipeSuccess: function(e, t) {if (n.event.swipeDate) {if (Date.now() - n.event.swipeDate < n.event.swipeTimeout) if (Math.abs(e - n.event.pageStarOffX) >= n.event.swipeRange || Math.abs(t - n.event.pageStarOffY) >= n.event.swipeRange) return n.event.swipeCallBack(n.event.pageStarOffX, n.event.pageStarOffY, e, t),!0;n.event.swipeDate = null}return ! 1},
  • touchstart:手指触摸屏幕时事件触发
  • touchend:手指离开屏幕时触发
  • touchmove:手指在屏幕上滑动式触发
  • touchcancel:系统取消touch事件的时候触发(该事件仅适用于带有触摸屏的设备)
touchstart: function(e) {e.preventDefault(),n.event.pageOffX = i.getOffsetX(e),n.event.pageOffY = i.getOffsetY(e),n.event.touchStart != null && n.event.touchStart(e, n.event.pageOffX, n.event.pageOffY);if (i.buttonLayoutEventHandler(e.type, n.event.pageOffX, n.event.pageOffY)) return ! 1;i.swipeStart(n.event.pageOffX, n.event.pageOffY)},touchend: function(e) {e.preventDefault();if (i.swipeSuccess(n.event.pageOffX, n.event.pageOffY)) return ! 1;if (i.buttonLayoutEventHandler(e.type, n.event.pageOffX, n.event.pageOffY)) return ! 1;n.event.touchEnd != null && n.event.touchEnd(e, n.event.pageOffX, n.event.pageOffY)},touchmove: function(e) {e.preventDefault(),n.event.pageOffX = i.getOffsetX(e),n.event.pageOffY = i.getOffsetY(e),n.event.touchMove != null && n.event.touchMove(e, n.event.pageOffX, n.event.pageOffY)},touchcancel: function(e) {n.event.pageOffX = i.getOffsetX(e),n.event.pageOffY = i.getOffsetY(e),n.event.touchCancel != null && n.event.touchCancel(e, n.event.pageOffX, n.event.pageOffY)},
  • mouseDown:鼠标按下事件,当鼠标的左键按下时触发

mouseDownclick点击事件不同,点击会包括两个动作,按下鼠标和松开鼠标,如果一个元素同时绑定了这两个事件,那么mousedown就会先触发,mouseup是鼠标按下后,松开鼠标按键这个动作会触发的事件,一定是先有按下动作的存在,才会有松开动作的出现。两者多配合mousemove使用于网页一些元素的拖拽事件

  • mouseUp:事件与其他浏览器原生事件一样,用于在鼠标按钮被释放时触发相应的操作
  • mouseMove:鼠标移动事件,在页面移动一像素就会触发的事件
click: function(e) {n.event.clickCallBack != null && n.event.clickCallBack(e, i.getOffsetX(e), i.getOffsetY(e))},mouseDown: function(e) {var t = i.getOffsetX(e),r = i.getOffsetY(e);if (i.buttonLayoutEventHandler(e.type, t, r)) return ! 1;n.event.mouseDownCallBack != null && n.event.mouseDownCallBack(e, t, r),i.swipeStart(t, r),t = r = null},mouseUp: function(e) {var t = i.getOffsetX(e),r = i.getOffsetY(e);if (i.buttonLayoutEventHandler(e.type, t, r)) return ! 1;if (i.swipeSuccess(t, r)) return ! 1;n.event.mouseUpCallBack != null && n.event.mouseUpCallBack(e, t, r),t = r = null},mouseMove: function(e) {n.event.mouseMoveCallBack != null && n.event.mouseMoveCallBack(e, i.getOffsetX(e), i.getOffsetY(e))},pageFocus: function(e) {if (n.event.focused) return n.event.focused = !1,!1;n.event.pageFocusCallBack != null && n.event.pageFocusCallBack(e)},pageUnFocus: function(e) {n.event.pageUnFocusCallBack != null && n.event.pageUnFocusCallBack(e)},checkKey: function(e) {var t = "0";for (var n in r.event.key) if (r.event.key[n] == e) {t = n;break}return t},
  • navigator:用于获取浏览器信息,通常通过UserAgent来识别浏览器类型
    注意:在IE浏览器中,由于UserAgent无法准确判断,因此可以使用ActiveXObject来识别

解释:

  • navigator.appCodeName:IE/Firefox/Chrome 等浏览器中,值为Mozilla
  • navigator.appName:IE/Firefox/Chrome 等浏览器中,均为Netscape
  • toLowerCase():用于返回调用该方法的字符串转换为小写后的新字符串;常用于比较字符串时忽略大小写的场景
    既然我们这里讲解了toLowerCase()方法,那衍生一下,看看toUpperCase()方法吧,其实跟toLowerCase()方法相反
  • toUpperCase():用于返回调用该方法的字符串转换为大写后的新字符串;常用于格式化字符串显示,如标题、标识符等
    注意:对于非字母字符,toLowerCase()和toUpperCase()都不会影响
getDeviceConfig: function() {var e = navigator.userAgent.toLowerCase();return e.indexOf("duopaosafari") != -1 ? {device: "duopaoSafari",fps: 1,touch: !0,zoom: 1}: e.indexOf("iphone") != -1 || e.indexOf("ipod") != -1 ? {device: "iphone",fps: 1,touch: !0,zoom: 1}: e.indexOf("ipad") != -1 ? {device: "ipad",fps: 1,touch: !0,zoom: 1}: e.indexOf("duopaoandroid") != -1 ? {device: "duopaoAndroid",fps: 1,touch: !0,zoom: 1}: e.indexOf("duopaowindowsphone") != -1 ? {device: "duopaoWindowsPhone",fps: 1,touch: !0,zoom: 1}: e.indexOf("opera mobi") != -1 ? {device: "operamobile",fps: 1,touch: !0,zoom: 1}: e.indexOf("flyflow") != -1 ? {device: "flyflow",fps: 1,touch: !0,zoom: 1}: e.indexOf("android") != -1 ? {device: "android",fps: 1,touch: !0,zoom: 1}: e.indexOf("iemobile") != -1 ? {device: "iemobile",fps: 1,touch: !1,zoom: 1}: e.indexOf("j2me") != -1 ? {device: "j2me",fps: 1,touch: !1,zoom: 1}: e.indexOf("symbian v5") != -1 ? {device: "symbian5",fps: 1,touch: !0,zoom: 1}: e.indexOf("symbian v3") != -1 ? {device: "symbian3",fps: 1,touch: !1,zoom: 1}: e.indexOf("chrome") != -1 ? {device: "chrome",fps: 1,touch: !1,zoom: 1}: e.indexOf("firefox") != -1 ? {device: "firefox",fps: 1,touch: !1,zoom: 1}: e.indexOf("msie") != -1 ? {device: "ie",fps: .5,touch: !1,zoom: 1}: e.indexOf("windows") != -1 ? {device: "ie",fps: .5,touch: !1,zoom: 1}: e.indexOf("safari") != -1 ? {device: "safari",fps: 1,touch: !1,zoom: 1}: e.indexOf("opera") != -1 ? {device: "opera",fps: 1,touch: !1,zoom: 1}: {device: "",fps: 1,touch: !1,zoom: 1}},
  • fillStyle:设置或返回用于填充绘画的颜色、渐变或模式
	<body><canvas id="zhouqiCanvas" width="200" height="100" style="border:1px solid #d3d3d3;"></canvas><script type="text/javascript">var zhou = document.getElementById('zhouqiCanvas');//获取canvas标签var qi = zhou.getContext('2d');//获得context对象//createLinearGradient:创建线性的渐变对象//渐变开始点的 x 坐标,渐变开始点的 y 坐标,渐变结束点的 x 坐标,渐变结束点的 y 坐标var gra = qi.createLinearGradient(0,0,0,170);gra.addColorStop(0,"black");gra.addColorStop(1,"white");qi.fillStyle = gra;qi.fillRect(40,20,120,120);</script></body>

fillStyle效果
在这里插入图片描述

  • fillRect:用于绘制一个填充的矩形

fillRect(x, y, width, height)

  • x:矩形起始点的 x 轴坐标
  • y:矩形起始点的 y 轴坐标
  • width:矩形的宽度,负值的话宽度是绝对值,但是往左移动宽度绝对值像素
  • height:矩形的高度,负值的话高度是绝对值,但是往上移动高度绝对值的像素
  • fillText:用于在画布上绘制填色的文本;文本的默认颜色是黑色
  • measureText:用于测量文本的宽度
  • getAnchor:这里将getAnchor分离,在HTTP请求中,get方法用于从服务器检索资源,而Anchor是URL中的一个部分,它通常指向某个网页的特定位置,也被称为片段标识符。它不会影响服务器端的请求,也不会被发送到服务器,而是仅用于在浏览器端的页面导航
  • graphics:用于进行图像绘制操作的抽象类,可以绘制直线、矩形、椭圆等图形

衍生讲一下:
graphics2D:继承自graphics类,提供了更多的绘制方法和功能,可以进行更高级的图像绘制操作

setImage: function(e, t, r, i, s) {if (!e || !t) return ! 1;n.image.imgs[e] || (n.image.imgs[e] = new Image, n.image.imgs[e].onload = function() {n.image.countLoaded++,this.loaded = !0,this.cache && m.canvas.pass(this.id, this.width, this.height).drawImage(this.id, 0, 0).pass().base().delImage(this.id, !0)},n.image.imgs[e].src = t + (n.image.version != "" ? "?v=" + n.image.version: ""), n.image.imgs[e].id = e, n.image.imgs[e].url = t, n.image.imgs[e].benchId = r, n.image.imgs[e].bench = i, n.image.imgs[e].cache = s, n.image.imgs[e].refreshed = !1)},setAudio: function(e, t, r, i, s, o) {if (!e || !t) return ! 1;if (!n.audio.audios[e]) {var u = new Audio(t + (n.image.version != "" ? "?v=" + n.image.version: ""));u.id = e,u.autoplay = i,u.preload = s,u.autobuffer = o,u.loop = r,n.audio.audios[u.id] = u,u = null}},loadingCallBack: function(e, t, r) {var i = m.canvas.screen.getWidth(),s = m.canvas.screen.getHeight(),o = i,u = 5,a = parseInt(i - o >> 1),f = s - u,e = e > t ? t: e,l = parseInt(e / t * 100) + "%";m.canvas.fillStyle(n.canvas.bgColor).fillRect(0, 0, i, s).fillStyle("#00FFFF").fillRect(a, f, parseInt(e / t * o), u).fillStyle("#FFF").fillText("loading " + r, 5, s - 10).fillText(l, i - m.canvas.measureText(l).width - 5, s - 10),i = s = o = u = a = f = l = null},loadingEndCallBack: null,getAnchor: function(e, t, n, i, s) {var o = e,u = t;switch (s) {case r.canvas.graphics.ANCHOR_HV:o -= parseInt(n / 2),u -= parseInt(i / 2);break;case r.canvas.graphics.ANCHOR_LV:u -= parseInt(i / 2);break;case r.canvas.graphics.ANCHOR_RV:o -= n,u -= parseInt(i / 2);break;case r.canvas.graphics.ANCHOR_HT:o -= parseInt(n / 2);break;case 0:case r.canvas.graphics.ANCHOR_LT:default:break;case r.canvas.graphics.ANCHOR_RT:o -= n;break;case r.canvas.graphics.ANCHOR_HB:o -= parseInt(n / 2),u -= i;break;case r.canvas.graphics.ANCHOR_LB:u -= i;break;case r.canvas.graphics.ANCHOR_RB:o -= n,u -= i}return {x: o,y: u}},
  • buttonsButtonsDataTables的扩展,将控制按钮添加到表中
initUrlParams: function(e) {if (e.indexOf("?") >= 0) {var t = e.split("?"),r = [];t[1].indexOf("&") >= 0 ? r = t[1].split("&") : r.push(t[1]);var i = [];for (var s = 0; s < r.length; s++) r[s].indexOf("=") >= 0 && (i = r[s].split("="), n.request.gets[i[0]] = i[1]);i = null,r = null,t = null}},audioEnded: function() {m.audio.replay(this.id)},pageLoaded: function() {n.image.inited = !0,n.system.pageLoad(m)},buttonLayoutAction: function() {var e = n.buttonLayout.buttons,t;for (var r = e.length - 1; r >= 0; r--) if (t = e[r]) t.action().render(),t.goned && t.endPath() && e.splice(r, 1);e = t = null},buttonLayoutEventHandler: function(e, t, r) {var i = n.buttonLayout.buttons,s, o = !1;for (var u = i.length - 1; u >= 0; u--) if (s = i[u]) if (m.comm.collision(s.x, s.y, s.width, s.height, t - 5, r - 5, 10, 10)) {switch (e) {case "mousedown":case "touchstart":s.hovered = !0,s.repeated = !0,s.pressed = !0,s.released = !1;break;case "mouseup":case "touchend":s.hovered && (s.released = !0, s.hovered = !1),s.repeated = !1,s.pressed = !1;break;default:}o = !0} else if (e == "mouseup" || e == "touchend") s.hovered = !1,s.repeated = !1;return i = s = null,o}},s,o,u,a,f,l,c,h,p,d,v = {arr: [],len: 0,v: 0};

先这样吧,朋友们,早点休息啦,明天还要早起呢🎆

相关文章:

jQuery小游戏(二)

jQuery小游戏&#xff08;二&#xff09; 今天是新年的第二天&#xff0c;本人在这里祝大家&#xff0c;新年快乐&#xff0c;万事胜意&#x1f495; 紧接jQuery小游戏&#xff08;一&#xff09;的内容&#xff0c;我们开始继续往下咯&#x1f61c; 游戏中使用到的方法 key…...

【MQ】如何保证消息队列的高可用?

RocketMQ NameServer集群部署 Broker做了集群部署 主从模式 类型&#xff1a;同步复制、异步复制 主节点返回消息给客户端的时候是否需要同步从节点 Dledger&#xff1a;要求至少消息复制到半数以上的节点之后&#xff0c;才给客户端返回写入成功 slave定时从master同步数据…...

简易计算器(c++ 实现)

前言 本文将用 c 实现一个终端计算器&#xff1a; 能进行加减乘除、取余乘方运算读取命令行输入&#xff0c;输出计算结果当输入表达式存在语法错误时&#xff0c;报告错误&#xff0c;但程序应能继续运行当输出 ‘q’ 时&#xff0c;退出计算器 【简单演示】 【源码位置】…...

AI大模型开发原理篇-4:神经概率语言模型NPLM

神经概率语言模型&#xff08;NPLM&#xff09;概述 神经概率语言模型&#xff08;Neural Probabilistic Language Model, NPLM&#xff09; 是一种基于神经网络的语言建模方法&#xff0c;它将传统的语言模型和神经网络结合在一起&#xff0c;能够更好地捕捉语言中的复杂规律…...

SpringBoot 基础特性

SpringBoot 基础特性 SpringApplication 相关特性 自定义 banner 在主配置文件写 banner.txt 的地址 #也可以不写默认路径就是 banner.txt #从类路径下找 banner #类路径就是 编译的target 目录 还有导入的第三方类路径。 spring.banner.locationclasspath:banner.txt#控制…...

网站快速收录:提高页面加载速度的重要性

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/32.html 网站快速收录中&#xff0c;提高页面加载速度具有极其重要的意义。以下从多个方面详细阐述其重要性&#xff1a; 一、提升用户体验 减少用户等待时间&#xff1a;页面加载速度直接…...

如何使用formlinker,重构微软表单创建的数字生产力法则?

仅需三步&#xff1a;上传文件-下载文件-导入文件到微软表单 凌晨两点的格式炼狱&#xff1a;被浪费的300万小时人类创造力 剑桥大学的实验室曾捕捉到一组震撼数据&#xff1a;全球教育工作者每年花在调整试题格式上的时间&#xff0c;足够建造3座迪拜哈利法塔。当北京某高校的…...

从零搭建一个Vue3 + Typescript的脚手架——day3

3.项目拓展配置 (1).配置Pinia Pinia简介 Pinia 是 Vue.js 3 的状态管理库&#xff0c;它是一个轻量级、灵活、易于使用的状态管理库。Pinia 是 Vue.js 3 的官方状态管理库&#xff0c;它可以帮助开发者更好地管理应用的状态。Pinia 是一个开源项目&#xff0c;它有丰富的文档…...

Three.js实战项目02:vue3+three.js实现汽车展厅项目

文章目录 实战项目02项目预览项目创建初始化项目模型加载与展厅灯光加载汽车模型设置灯光材质设置完整项目下载实战项目02 项目预览 完整项目效果: 项目创建 创建项目: pnpm create vue安装包: pnpm add three@0.153.0 pnpm add gsap初始化项目 修改App.js代码&#x…...

Linux——网络(tcp)

文章目录 目录 文章目录 前言 一、TCP逻辑 1. 面向连接 三次握手&#xff08;建立连接&#xff09; 四次挥手&#xff08;关闭连接&#xff09; 2. 可靠性 3. 流量控制 4. 拥塞控制 5. 基于字节流 6. 全双工通信 7. 状态机 8. TCP头部结构 9. TCP的应用场景 二、编写tcp代码函数…...

Ubuntu Server 安装 XFCE4桌面

Ubuntu Server没有桌面环境&#xff0c;一些软件有桌面环境使用起来才更加方便&#xff0c;所以我尝试安装桌面环境。常用的桌面环境有&#xff1a;GNOME、KDE Plasma、XFCE4等。这里我选择安装XFCE4桌面环境&#xff0c;主要因为它是一个极轻量级的桌面环境&#xff0c;适合内…...

分享|通过Self-Instruct框架将语言模型与自生成指令对齐

结论 在大型 “指令调整” 语言模型依赖的人类编写指令数据存在数量、多样性和创造性局限&#xff0c; 从而阻碍模型通用性的背景下&#xff0c; Self - Instruct 框架&#xff0c; 通过 自动生成 并 筛选指令数据 微调预训练语言模型&#xff0c; 有效提升了其指令遵循能…...

指针空值——nullptr(C++11)——提升指针安全性的利器

C11引入的nullptr是对指针空值的正式支持&#xff0c;它提供了比传统NULL指针更加安全和明确的指针空值表示方式。在C语言中&#xff0c;指针操作是非常基础且常见的&#xff0c;而如何安全地处理指针空值&#xff0c;一直是开发者关注的重要问题。本文将详细讲解nullptr的引入…...

C++游戏开发

C 是游戏开发中广泛使用的编程语言&#xff0c;因其高性能、灵活性和对硬件的直接控制能力而备受青睐。以下是 C 游戏开发的一些关键点&#xff1a; 1. 游戏引擎 Unreal Engine&#xff1a;使用 C 作为主要编程语言&#xff0c;适合开发高质量 3D 游戏。Unity&#xff1a;虽然…...

【Docker】ubuntu中 Docker的使用

之前记录了 docker的安装 【环境配置】ubuntu中 Docker的安装&#xff1b; 本篇博客记录Dockerfile的示例&#xff0c;docker 的使用&#xff0c;包括镜像的构建、容器的启动、docker compose的使用等。   当安装好后&#xff0c;可查看docker的基本信息 docker info ## 查…...

Linux C openssl aes-128-cbc demo

openssl 各版本下载 https://openssl-library.org/source/old/index.html#include <stdio.h> #include <string.h> #include <openssl/aes.h> #include <openssl/rand.h> #include <openssl/evp.h>#define AES_KEY_BITS 128 #define GCM_IV_SIZ…...

【卫星通信】链路预算方法

本文介绍卫星通信中的链路预算方法&#xff0c;应该也适用于地面通信场景。 更多内容请关注gzh【通信Online】 文章目录 下行链路预算卫星侧参数信道参数用户侧参数 上行链路预算链路预算计算示例 下行链路预算 卫星侧参数 令卫星侧天线数为 M t M_t Mt​&#xff0c;每根天线…...

【Elasticsearch】 索引模板 ignore_missing_component_templates

解释 ignore_missing_component_templates 配置 在Elasticsearch中&#xff0c;ignore_missing_component_templates 是一个配置选项&#xff0c;用于处理索引模板中引用的组件模板可能不存在的情况。当您创建一个索引模板时&#xff0c;可以指定一个或多个组件模板&#xff0…...

Github 2025-01-30 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2025-01-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…...

Linux 下注册分析(4)

系列文章目录 Linux 设备树 Linux 下注册分析&#xff08;1&#xff09; Linux 下注册分析&#xff08;2&#xff09; Linux 下注册分析&#xff08;3&#xff09; Linux 下注册分析&#xff08;4&#xff09; 文章目录 系列文章目录1、device_create简介device_createdevice_c…...

PhotoShop中JSX编辑器安装

1.使用ExtendScript Tookit CC编辑 1.安装 打开CEP Resource链接&#xff1a; CEP-Resources/ExtendScript-Toolkit at master Adobe-CEP/CEP-Resources (github.com) 将文件clone到本地或者下载到本地 点击AdobeExtendScriptToolKit_4_Ls22.exe安装&#xff0c;根据弹出的…...

目前市场主流的AI PC对于大模型本地部署的支持情况分析-Deepseek

以下是目前市场主流AI PC对**大模型本地部署支持情况**的综合分析&#xff0c;结合硬件能力、软件生态及厂商动态进行总结&#xff1a; --- ### **一、硬件配置与算力支持** 1. **核心处理器架构** - **异构计算方案&#xff08;CPUGPUNPU&#xff09;**&#xff1a;主流…...

51单片机开发:独立键盘实验

实验目的&#xff1a;按下键盘1时&#xff0c;点亮LED灯1。 键盘原理图如下图所示&#xff0c;可见&#xff0c;由于接GND&#xff0c;当键盘按下时&#xff0c;P3相应的端口为低电平。 键盘按下时会出现抖动&#xff0c;时间通常为5-10ms&#xff0c;代码中通过延时函数delay…...

微服务网关鉴权之sa-token

目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...

STM32 TIM输入捕获 测量频率

输入捕获简介&#xff1a; IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器…...

python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)

python | OpenCV小记&#xff08;一&#xff09;&#xff1a;cv2.imread&#xff08;f&#xff09;读取图像操作 1. 为什么 [:, :, 0] 提取的是第一个通道&#xff08;B 通道&#xff09;&#xff1f;OpenCV 的通道存储格式索引操作 [:, :, 0] 的解释常见误解 1. 为什么 [:, :,…...

解析静态链接

文章目录 静态链接空间与地址分配相似段合并虚拟地址分配符号地址确定符号解析与重定位链接器优化重复代码消除函数链接级别静态库静态链接优缺点静态链接 一组目标文件经过链接器链接后形成的文件即可执行文件,如果没有动态库的加入,那么这个可执行文件被加载后无需再进行重…...

Ollama 运行从 ModelScope 下载的 GGUF 格式的模型

本文系统环境 Windows 10 Ollama 0.5.7 Ollama 是什么&#xff1f; Ollama 可以让你快速集成和部署本地 AI 模型。它支持各种不同的 AI 模型&#xff0c;并允许用户通过简单的 API 进行调用 Ollama 的安装 Ollama 官网 有其下载及安装方法&#xff0c;非常简便 但如果希…...

【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)

文章目录 【2025年最新版】Java JDK安装、环境配置教程 &#xff08;图文非常详细&#xff09;1. JDK介绍2. 下载 JDK3. 安装 JDK4. 配置环境变量5. 验证安装6. 创建并测试简单的 Java 程序6.1 创建 Java 程序&#xff1a;6.2 编译和运行程序&#xff1a;6.3 在显示或更改文件的…...

探索性测试与自动化测试的结合

随着软件开发周期的不断缩短和质量要求的不断提高&#xff0c;测试行业正在经历一场深刻的变革。自动化测试因其高效性和可重复性成为测试团队必不可少的工具&#xff0c;而探索性测试&#xff08;Exploratory Testing, ET&#xff09;则因其灵活性和创意性在面对复杂、动态变化…...

我是如何写作的?

以前是如何写作的 从小学三年级开始学写作文&#xff0c;看的作文书&#xff0c;老师布置作文题目&#xff0c;内容我都是自己写的。那时会积累一些好词&#xff0c;听到什么好词就记住了。并没有去观察什么&#xff0c;也没有好好花心思在写作上。总觉得我写的作文与真正好的…...

智慧园区管理系统为企业提供高效运作与风险控制的智能化解决方案

内容概要 快鲸智慧园区管理系统&#xff0c;作为一款备受欢迎的智能化管理解决方案&#xff0c;致力于为企业提供高效的运作效率与风险控制优化。具体来说&#xff0c;这套系统非常适用于工业园、产业园、物流园、写字楼及公寓等多种园区和商办场所。它通过数字化与智能化的手…...

INCOSE需求编写指南-附录 B: 首字母缩略词和缩写

附录 Appendix B: 首字母缩略词和缩写ACRONYMS AND ABBREVIATIONS AD 难易程度的进阶 Advancement Degree of Difficulty AI 人工智能 Artificial Intelligence CM 配置管理 Configuration Management ConOps 运作理念 Concept of Operations COTS 商业现货 Comme…...

VS2008 - debug版 - 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。

文章目录 VS2008 - debug版 - 由于应用程序配置不正确&#xff0c;应用程序未能启动。重新安装应用程序可能会纠正这个问题。概述笔记VS2008安装环境VS2008测试程序设置默认报错的情况措施1措施2备注 - exe清单文件的问题是否使用静态库?_BIND_TO_CURRENT_VCLIBS_VERSION的出处…...

Docker容器数据恢复

Docker容器数据恢复 1 创建mongo数据库时未挂载数据到宿主机2 查找数据卷位置3 将容器在宿主机上的数据复制到指定目录下4 修改docker-compose并挂载数据&#xff08;注意端口&#xff09;5 重新运行新容器 以mongodb8.0.3为例。 1 创建mongo数据库时未挂载数据到宿主机 versi…...

翼星求生服务器搭建【Icarus Dedicated Server For Linux】

一、前言 本次搭建的服务器为Steam平台一款名为Icarus的沙盒、生存、建造游戏,由于官方只提供了Windows版本服务器导致很多热爱Linux的小伙伴无法释怀,众所周知Linux才是专业服务器的唯一准则。虽然Github上已经有大佬制作了容器版本但是容终究不够完美,毕竟容器无法与原生L…...

如何在data.table中处理缺失值

&#x1f4ca;&#x1f4bb;【R语言进阶】轻松搞定缺失值&#xff0c;让数据清洗更高效&#xff01; &#x1f44b; 大家好呀&#xff01;今天我要和大家分享一个超实用的R语言技巧——如何在data.table中处理缺失值&#xff0c;并且提供了一个自定义函数calculate_missing_va…...

react中如何获取dom元素

实现代码 const inputRef useRef(null) inputRef.current.focus()...

引入@Inject的依赖包

maven引入Inject的依赖包 在 Maven 项目中引入 Inject 注解所需的依赖包同样取决于你打算使用的依赖注入框架。以下是一些常见框架及其 Maven 依赖配置的示例&#xff1a; 1. Google Guice 如果你打算使用 Google Guice&#xff0c;你需要在 pom.xml 文件中添加 Guice 的依赖…...

Deep Seek R1本地化部署

目录 说明 一、下载ollama 二、在ollama官网下载模型 三、使用 后记 说明 操作系统&#xff1a;win10 使用工具&#xff1a;ollama 一、下载ollama 从官网下载ollama&#xff1a; ollama默认安装在C盘&#xff0c;具体位置为C:\Users\用户名\AppData\Local\Programs\O…...

RDMA 工作原理 | 支持 RDMA 的网络协议

注&#xff1a;本文为 “RDMA” 相关文章合辑。 英文引文机翻未校。 图片清晰度受引文所限。 Introduction to Remote Direct Memory Access (RDMA) Written by: Dotan Barak on March 31, 2014.on February 13, 2015. What is RDMA? 什么是 RDMA&#xff1f; Direct me…...

再见了流氓软件~~

聊一聊 最近一直在测试软件&#xff0c;需要装各种软件和工具配合测试&#xff0c;导致现在电脑都快装满了&#xff0c;需要把不用的软件卸载。电脑自带的卸载只能一个一个卸载&#xff0c;不但麻烦还卸载不干净。 相信很多人也有这方面的需要&#xff0c;电脑装了很多软件&a…...

165. 比较版本号

两个注意的点&#xff1a; 分割字符串的时候&#xff0c;要用split("\\.")而不能用split(".")&#xff0c;因为前者表示“对.使用斜杠转义&#xff0c;\\表示一个斜杠”&#xff0c;而后者表示匹配任意单个字符&#xff0c;例如version2 "1.2.3&quo…...

一文大白话讲清楚webpack进阶——9——ModuleFederation实战

文章目录 一文大白话讲清楚webpack进阶——9——ModuleFederation实战1. 啥是ModuleFederation2. 创建容器应用3. 创建远程应用4. 启动远程应用5. 使用远程应用的组件 一文大白话讲清楚webpack进阶——9——ModuleFederation实战 1. 啥是ModuleFederation 先看这篇文章&#…...

【llm对话系统】LLM 大模型Prompt 怎么写?

如果说 LLM 是一个强大的工具&#xff0c;那么 Prompt 就是使用这个工具的“说明书”。一份好的 Prompt 可以引导 LLM 生成更准确、更相关、更符合你期望的输出。 今天&#xff0c;我们就来聊聊 LLM Prompt 的编写技巧&#xff0c;掌握这把解锁 LLM 潜能的钥匙&#xff01; 一…...

INCOSE需求编写指南-附录 C: 需求模式

附录 Appendix C: 需求模式 Requirement Patterns C.1 需求模式简介 Introduction to Requirement Patterns 需求模式&#xff08;样板或模板&#xff09;的概念最初于 1998 年在英国的未来水面战斗人员 (FSC) 国防项目中应用&#xff08;Dick 和 Llorens&#xff0c;2012 年…...

WGCLOUD使用介绍 - 如何监控ActiveMQ和RabbitMQ

根据WGCLOUD官网的信息&#xff0c;目前没有针对ActiveMQ和RabbitMQ这两个组件专门做适配 不过可以使用WGCLOUD已经具备的通用监测模块&#xff1a;进程监测、端口监测或者日志监测、接口监测 来对这两个组件进行监控...

【VASP】AIMD计算总结

【VASP】AIMD计算总结 vasp 计算文件INCAR 参数介绍后处理 二维材料与异质结的构造除了筛选优势还应该判断是否稳定&#xff0c;所以我在这分享一篇基于vasp6.2计算的AIMD 示例&#xff1a; https://www.vasp.at/wiki/index.php/Liquid_Si_-_Standard_MD vasp 计算文件 POSCA…...

春节旅游高峰,人力资源如何巧妙应对?‌

‌春节旅游高峰&#xff0c;人力资源如何巧妙应对&#xff1f;‌ 春节等假期一到&#xff0c;各大旅游景区便人潮汹涌&#xff0c;游客如织。面对这种旅游高峰&#xff0c;工作人员往往要连续超负荷运转&#xff0c;身心俱疲。特别是在那些热门景区和网红打卡地&#xff0c;人…...

zsh安装插件

0 zsh不仅在外观上比较美观&#xff0c;而且其具有强大的插件&#xff0c;如果不使用那就亏大了。 官方插件库 https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins 官方插件库并不一定有所有的插件&#xff0c;比如zsh-autosuggestions插件就不再列表里&#xff0c;下面演示zs…...