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

【Java 进阶篇】插上翅膀:JQuery 插件机制详解

在这里插入图片描述

在前端开发中,JQuery 作为一个广泛应用的 JavaScript 库,为开发者提供了丰富的工具和方法,简化了 DOM 操作、事件处理等繁琐的任务。而在这个庞大的生态系统中,插件机制是 JQuery 的一项重要特性,使得开发者能够轻松地扩展 JQuery 的功能,实现更灵活、高效的前端开发。本篇博客将围绕 JQuery 插件机制展开详细的讲解,带你一探插件的神奇世界。

开启插件的舞台

在深入了解插件机制之前,让我们先了解一下 JQuery 插件的基本概念。简而言之,JQuery 插件是一种通过 JQuery 扩展机制添加的新方法或特性,它们可以在 JQuery 对象上调用,使得开发者能够方便地复用和扩展功能。

编写简单的 JQuery 插件

为了更好地理解插件机制,我们将从一个简单的例子入手,逐步介绍插件的编写过程。

首先,假设我们希望创建一个 JQuery 插件,用于在页面中弹出提示框。我们可以按照以下步骤进行:

1. 引入 JQuery 库

在 HTML 文件中引入 JQuery 库,如果你还没有引入的话。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JQuery 插件示例</title><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body><!-- 页面内容 --></body>
</html>

2. 编写插件代码

接下来,我们编写一个简单的 JQuery 插件,命名为 popupAlert,用于弹出提示框。

// JQuery 插件代码
(function($) {$.fn.popupAlert = function(options) {// 默认配置var settings = $.extend({message: 'Hello, this is a popup alert!',backgroundColor: '#4caf50',color: 'white'}, options);// 在每个匹配的元素上执行操作return this.each(function() {var $this = $(this);// 创建提示框var popup = $('<div>').text(settings.message).css({'background-color': settings.backgroundColor,'color': settings.color,'padding': '10px','border-radius': '5px','position': 'fixed','top': '50%','left': '50%','transform': 'translate(-50%, -50%)','z-index': '9999'});// 添加到页面$this.append(popup);// 设置定时器,2秒后移除提示框setTimeout(function() {popup.remove();}, 2000);});};
})(jQuery);

在这个例子中,我们通过 $.fn 扩展了 JQuery 的原型,创建了一个名为 popupAlert 的插件。这个插件接受一个包含配置信息的对象作为参数,根据配置信息在页面中创建一个弹出提示框,并在一定时间后移除。

3. 使用插件

现在我们可以在页面中使用这个插件了。

// 使用插件
$(document).ready(function() {$('#myElement').popupAlert({message: 'Welcome to the world of JQuery plugins!',backgroundColor: '#3498db',color: 'white'});
});

在这个例子中,我们选择了页面中的某个元素(假设其 idmyElement),然后调用了我们刚刚创建的 popupAlert 插件,并传入了一些配置参数。这样,我们就在页面中成功地使用了一个简单的 JQuery 插件。

JQuery 插件的原理

了解了如何编写一个简单的 JQuery 插件后,让我们深入揭开插件的神秘面纱,了解它是如何工作的。

JQuery 插件的核心原理就是通过扩展 JQuery 的原型对象,为 JQuery 对象添加新的方法。在上面的例子中,我们通过 $.fn.popupAlert 扩展了 JQuery 的原型,使得所有的 JQuery 对象都能调用 popupAlert 方法。

插件的扩展方式

在 JQuery 插件中,有两种常见的扩展方式,分别是基于选择器的扩展和基于工具方法的扩展。

基于选择器的扩展

基于选择器的扩展是通过 $.fn 对象的方式,为所有 JQuery 选择器返回的对象添加新的方法。这种扩展方式通常用于操作一组元素,例如在所有匹配的元素上执行相同的操作。

// 基于选择器的扩展
$.fn.myPlugin = function() {// 在所有匹配的元素上执行操作return this.each(function() {// 操作逻辑});
};
基于工具方法的扩展

基于工具方法的扩展是通过 $. 对象的方式,为 JQuery 提供一些全局的工具方法。这种扩展方式通常用于提供一些独立的功能,不依赖于具体的 DOM 元素。

// 基于工具方法的扩展
$.myPlugin = function() {// 独立功能的操作逻辑
};

插件的配置与默认值

为了使插件更加灵活,通常会为插件提供一些可配置的参数,并为这些参数设置默认值。这样,用户在使用插件时可以选择是否传入配置参数,以及自定义参数的值。

在前面的例子中,我们使用了 $.extend 方法来合并用户传入的配置和默认配置。这是 JQuery 提供的一个方便的方法,它能够将多个对象的内容合并成一个对象,并返回这个新对象。这样,用户只需要传入需要自定义的配置项,而不必担心漏掉其他配置。

var settings = $.extend({message: 'Hello, this is a popup alert!',backgroundColor: '#4caf50',color: 'white'
}, options);

上述代码中,settings 对象包含了默认配置和用户传入的配置的合并结果。这样,我们在后续的代码中就可以直接使用 settings 对象,而无需担心某些配置项是否被传入。

JQuery 插件的链式调用

JQuery 的链式调用是一种非常灵活的编程方式,允许我们在一行代码中对同一个 JQuery 对象执行多个操作。这也适用于插件的调用。

在插件的代码中,通过 return this.each(...) 语句,我们使得插件支持链式调用。这样,用户可以在一行代码中依次调用多个插件方法,提高了代码的可读性和灵活性。

$('#myElement').popupAlert().fadeOut().addClass('highlight');

在上述代码中,我们依次调用了 popupAlertfadeOutaddClass 三个方法,而这三个方法都是基于 JQuery 插件机制扩展的。

实战案例:图片轮播插件

为了更深入地理解 JQuery 插件机制,让我们来实现一个简单的图片轮播插件。该插件可以接受一组图片,然后在页面中创建一个图片轮播的效果。

1. 编写 HTML 结构

首先,我们需要一个容器来放置图片,以及左右箭头用于切换图片。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Image Slider Plugin</title><style>.slider-container {position: relative;overflow: hidden;width: 600px;margin: 20px auto;}.slider {display: flex;transition: transform 0.5s ease-in-out;}.slider img {width: 100%;object-fit: cover;}.arrow {position: absolute;top: 50%;transform: translateY(-50%);font-size: 24px;cursor: pointer;color: white;background-color: #333;padding: 10px;border: none;outline: none;cursor: pointer;}.prev {left: 0;}.next {right: 0;}</style><script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body><div class="slider-container"><div class="slider"><img src="image1.jpg" alt="Image 1"><img src="image2.jpg" alt="Image 2"><img src="image3.jpg" alt="Image 3"></div><button class="arrow prev">&lt;</button><button class="arrow next">&gt;</button>
</div><script src="slider-plugin.js"></script>
</body>
</html>

在这个例子中,我们创建了一个包含图片轮播的容器 .slider-container,其中包含一个图片容器 .slider 和左右切换按钮 .prev.next。注意,我们还为左右箭头按钮添加了样式和点击事件。

2. 编写 JQuery 插件代码

接下来,我们创建一个名为 sliderPlugin 的 JQuery 插件,用于初始化图片轮播效果。

// slider-plugin.js
(function($) {$.fn.sliderPlugin = function() {return this.each(function() {var $this = $(this);var $slider = $this.find('.slider');var $prevBtn = $this.find('.prev');var $nextBtn = $this.find('.next');var slideIndex = 0;// 获取图片数量var slideCount = $slider.children().length;// 设置图片容器的宽度$slider.css('width', slideCount * 100 + '%');// 点击事件:向前切换$prevBtn.click(function() {if (slideIndex > 0) {slideIndex--;} else {slideIndex = slideCount - 1;}updateSlider();});// 点击事件:向后切换$nextBtn.click(function() {if (slideIndex < slideCount - 1) {slideIndex++;} else {slideIndex = 0;}updateSlider();});// 更新图片轮播位置function updateSlider() {var translateValue = -slideIndex * 100 + '%';$slider.css('transform', 'translateX(' + translateValue + ')');}});};
})(jQuery);

在这个插件代码中,我们首先获取了容器、图片轮播、左右按钮等元素,然后初始化了一些参数,包括图片数量、设置图片容器的宽度等。

接着,我们为左右按钮添加了点击事件,点击按钮时更新 slideIndex 的值,然后调用 updateSlider 函数来更新图片轮播的位置。这里使用了 CSS 的 transform 属性来实现图片轮播的效果,通过改变 translateX 值来切换图片的位置。

3. 使用插件

最后,在 HTML 文件中引入插件脚本,并初始化插件。

<!-- ... 省略其他代码 ... --><script src="slider-plugin.js"></script>
<script>$(document).ready(function() {$('.slider-container').sliderPlugin();});
</script>
</body>
</html>

在这个例子中,我们使用 $('.slider-container').sliderPlugin(); 来初始化图片轮播插件。这行代码选择了具有 slider-container 类的元素,并调用了我们编写的 sliderPlugin 插件。这样,页面中具有这个类的容器就会被初始化成一个简单的图片轮播。

高级话题:插件的选项和事件

在实际项目中,有时我们需要更多的定制化选项和事件来满足不同的需求。让我们通过一个简单的例子来展示如何为插件添加选项和事件。

1. 为插件添加选项

在前面的例子中,我们已经展示了如何使用配置对象来自定义插件的行为。现在,我们来扩展插件,允许用户通过选项来设置轮播的速度。

// slider-plugin.js
(function($) {$.fn.sliderPlugin = function(options) {// 默认配置var settings = $.extend({speed: 500}, options);return this.each(function() {// ... 省略其他代码 ...// 点击事件:向前切换$prevBtn.click(function() {if (slideIndex > 0) {slideIndex--;} else {slideIndex = slideCount - 1;}updateSlider();});// 点击事件:向后切换$nextBtn.click(function() {if (slideIndex < slideCount - 1) {slideIndex++;} else {slideIndex = 0;}updateSlider();});// 更新图片轮播位置function updateSlider() {var translateValue = -slideIndex * 100 + '%';$slider.stop().animate({'translateX': translateValue}, settings.speed);}});};
})(jQuery);

在这个例子中,我们在插件的默认配置中添加了一个新的选项 speed,用于设置图片轮播的速度。在 updateSlider 函数中,我们使用了 JQuery 的 animate 方法来实现动画效果,其中的 settings.speed 就是用户传入的速度选项。

2. 触发插件事件

除了选项,有时我们还需要在插件的某些关键点触发事件,以便用户可以在插件执行过程中执行自定义的操作。让我们为图片轮播插件添加一个 slideChange 事件,当图片切换时触发。

// slider-plugin.js
(function($) {$.fn.sliderPlugin = function(options) {// 默认配置var settings = $.extend({speed: 500}, options);return this.each(function() {// ... 省略其他代码 ...// 更新图片轮播位置function updateSlider() {var translateValue = -slideIndex * 100 + '%';$slider.stop().animate({'translateX': translateValue}, settings.speed, function() {// 触发 slideChange 事件$this.trigger('slideChange', slideIndex);});}});};
})(jQuery);

在这里,我们使用了 trigger 方法来触发自定义的 slideChange 事件,并传递了当前的 slideIndex 值。用户可以通过监听这个事件来执行额外的操作,例如更新页面上的指示器、显示当前图片的标题等。

总结

通过本文的详细介绍,我们深入了解了 JQuery 插件机制的原理和实践。从简单的弹出提示框插件到实用的图片轮播插件,我们逐步展开了插件的编写过程,学会了如何为插件添加选项和触发事件。

插件机制使得 JQuery 更加强大,开发者可以通过简单的扩展来满足各种需求,提高代码的可维护性和可复用性。在实际项目中,合理地使用插件可以大大提高开发效率,让前端开发变得更加轻松和有趣。希望本文对你深入理解 JQuery 插件机制有所帮助,也能够激发你在前端开发中的创造力。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

相关文章:

【Java 进阶篇】插上翅膀:JQuery 插件机制详解

在前端开发中&#xff0c;JQuery 作为一个广泛应用的 JavaScript 库&#xff0c;为开发者提供了丰富的工具和方法&#xff0c;简化了 DOM 操作、事件处理等繁琐的任务。而在这个庞大的生态系统中&#xff0c;插件机制是 JQuery 的一项重要特性&#xff0c;使得开发者能够轻松地…...

手动编译GDB

手动编译GDB 起因在于使用Clang-14编译C文件并生成调试信息,使用gdb调试时报DWARF相关错误。经检查原因在于虚拟机为Ubuntu 20.04&#xff0c;使用apt下载时官方提供gdb版本为9.2&#xff0c;不支持DWARF5,而Clang-14生成的调试信息是DWARF5版本的。为解决该问题&#xff0c;手…...

竞赛选题 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &a…...

替换SlowFast中Detectron2为Yolov8

一 需求 FaceBookReserch中SlowFast源码中检测框是用Detectron2进行目标检测&#xff0c;本文想实现用yolov8替换detectron2二 实施方案 首先&#xff0c;yolov8 支持有自定义库ultralytics&#xff08;仅支持yolov8&#xff09;&#xff0c;安装对应库 pip install ultraly…...

轻量化网络--MobileNet V1

文章目录 depth-wise separable convolutions普通卷积depthwise conconvolutionspointwise convolutions网络结构进一步分析网络训练方式两个重要的超参数Width Multiplier: Thinner ModelsResolution Multiplier: Reduced Representation实验结果消融实验细粒度,高分辨率识别…...

gittee启动器

前言 很多小伙伴反馈不是使用gitee&#xff0c;不会寻找好的项目&#xff0c;在拿到一个项目不知道从哪里入手。 鼠鼠我呀就是宠粉&#xff0c;中嘞&#xff0c;老乡。整&#xff01;&#xff01;&#xff01; git的基本指令 在使用gitee的时候呢&#xff0c;我们只需要记住…...

Spark数据倾斜_产生原因及定位处理办法_生产环境

在最近的项目中&#xff0c;历史和实时数据进行关联平滑时出现了数据倾斜&#xff0c;产生了笛卡尔积&#xff0c;具体现象如下&#xff1a;运行内存175GB&#xff0c;核数64&#xff0c;运行代码时&#xff0c;查看SparkUI界面的active jobs &#xff0c;数据输入是1G&#xf…...

2023OceanBase年度发布会后,有感

很荣幸收到了OceanBase邀请&#xff0c;于本周四&#xff08;11月16日&#xff09;参加了OceanBase年度发布会并参加了DBA老友会&#xff0c;按照理论应该我昨天&#xff08;星期五&#xff09;就回到成都了&#xff0c;最迟今天白天就该把文章写出来了&#xff0c;奈何媳妇儿买…...

ubuntu18.04中代码迁移到20.04报错

一、 PCL库&#xff0c;Eigen库报错&#xff0c;如&#xff1a; /usr/include/pcl-1.10/pcl/point_types.h:903:29: error: ‘enable_if_t’ in namespace ‘std’ does not name a template type; did you mean ‘enable_if’?/usr/include/pcl-1.10/pcl/point_types.h:698:…...

QQ五毛项目记

问题与挑战&#xff1a;某公司为了实现某马总造福全人类&#xff0c;红旗插遍全球的宏伟目标&#xff0c;为应对后续用户激增的问题。特别安排了一次针对全体用户的秒杀活动&#xff1a;于XXXX年XX月XX日XX时XX分XX秒开始的秒杀五毛钱一百个QQ币的活动。每个账户仅限一次&#…...

小程序实现登录持久化

小程序实现登录持久化需要使用到小程序的缓存API&#xff0c;例如wx.getStorageSync()和wx.setStorageSync()等方法。以下是一个简单的代码实现&#xff1a; // App.js App({ // 在全局的App.js中定义全局变量userInfo&#xff0c;用于存放用户信息 globalData: { userInfo: …...

2023年亚太杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…...

C复习-输入输出函数+流

参考&#xff1a; 里科《C和指针》 perror 定义在stdio.h中。当一个库函数失败时&#xff0c;库函数会在一个外部整型变量errno&#xff08;在errno.h中定义&#xff09;中保存错误代码&#xff0c;然后传递给用户程序&#xff0c;此时使用perror&#xff0c;会在打印msg后再打…...

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113

duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113 搭建dg过程中&#xff0c;发现有一个数据文件在复制过程中没有复制过来&#xff0c;在备库数据文件目录找不到这个数据文件 处理方法&#xff1a; 第一步&#xff1a;主库备份86#数据文件 C:\Users\Admi…...

golang 解析oracle 数据文件头

package mainimport ("encoding/binary""fmt""io""os" ) // Powered by 黄林杰 15658655447 // Usered for parser oracle datafile header block 1 .... // oracle 数据文件头块解析 // KCBlockStruct represents the structure of t…...

van-popup滑动卡顿并且在有时候在ios上经常性滑动卡顿的情况

解决”pc端页面可以滚动&#xff0c;移动端手势无法滚动“问题的一次经历 - 掘金 <van-popup v-model"studentclassShow" :lock-scroll"false" position"bottom" style"z-index: 3000" :style"{ height: 55% }"><d…...

YOLOv7独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv7独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…...

ubuntu20.04中编译zlib1.2.11(源码编译)

1. 安装cmake-gui 2. 下载并解压zlib-1.2.11&#xff0c;在解压得到的文件夹内部创建一个“build”文件夹。 3. 打开cmake-gui&#xff0c;配置zlib1.2.11的configure文件&#xff08;主要编辑build路径&#xff0c;安装路径&#xff0c;以及其他依赖选项&#xff09;&#x…...

计算机毕业设计选题推荐-高校后勤报修微信小程序/安卓APP-项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

如何零基础自学AI人工智能

随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;越来越多的有志之士被其强大的潜力所吸引&#xff0c;希望投身其中。然而&#xff0c;对于许多零基础的人来说&#xff0c;如何入门AI成了一个难题。本文将为你提供一份详尽的自学AI人工智能的攻略&#xff0c;帮…...

pm2使用

常用命令 pm2 delete/stop/restart/start/list/info/monit/log...

在Ubuntu或linux中为coreutils工具包的cp和mv命令添加进度条

1、查看当前最新的coreutils版本&#xff1a; http://ftp.gnu.org/gnu/coreutils/ 2、安装coreutils过程 # wget http://ftp.gnu.org/gnu/coreutils/coreutils-9.4.tar.xz # tar -xJf coreutils-9.4.tar.xz # cd coreutils-9.4/ 对照上面的&#xff0c;下载对应coreutils版本…...

力扣-58. 最后一个单词的长度

int lengthOfLastWord(char* s) {char* temp s;char* ret s;int count 0;/*返回的长度*/while (*temp){/*只记录空格后是字母的地址*/if ((*temp ) && (*(temp 1) ! \0) && (*(temp 1) ! )){ret temp 1;}temp;}while (*ret){if (isalpha(*ret) ! 0)…...

快递鸟荣获全球电子商务创业创新大赛总决赛一等奖

日前&#xff0c;以“开放、连接、协同、赋能”为主题&#xff0c;由商务部中国国际电子商务中心指导&#xff0c;浙江省商务厅、中共省委组织部、中共省委宣传部、中共省委网信办、省发展和改革委、省教育厅、省科技厅、省财政厅、省人力社保厅、团省委主办&#xff0c;湖州市…...

阶段七-Day02-SpringMVC

一、Restful请求格式 1. 介绍 Rest(Representational State Transfer&#xff1a;表现层状态转移)是一种软件架构风格&#xff0c;其核心是面向资源的一种设计。何为面向资源&#xff0c;意思是网络上的所有事物都可以抽象为资源&#xff0c;而每个资源都有唯一的资源标识&…...

YOLOv5独家原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv5独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…...

【深度学习】pytorch快速得到mobilenet_v2 pth 和onnx

在linux执行这个程序&#xff1a; import torch import torch.onnx from torchvision import transforms, models from PIL import Image import os# Load MobileNetV2 model model models.mobilenet_v2(pretrainedTrue) model.eval()# Download an example image from the P…...

高防CDN安全防护系统在业务方面的应用

在当今数字化的时代&#xff0c;网络安全问题日益严峻&#xff0c;保护网站和数据免受攻击变得至关重要。CDN安全防护系统作为一种有效的解决方案&#xff0c;受到了广泛关注。小德将向您介绍CDN安全防护系统的原理、应用场景以及使用方法&#xff0c;助您更好地保障网络安全。…...

opencv(3):控制鼠标,创建 tackbar控件

文章目录 控制鼠标相关APIsetMouseCallbackcallback TrackBar 控件cv2.createTrackbarcv2.getTrackbarPos&#xff1a; 控制鼠标相关API setMouseCallback(winname, callback, userdata)callback(event, x, y, flags, userdata) setMouseCallback 在 OpenCV 中&#xff0c;s…...

UE4动作游戏实例RPG Action解析二:GAS系统播放武器绑定的技能,以及GE效果

一、GAS系统播放武器技能 官方实例激活技能通过装备系统数据激活,我先用武器数据资产直接激活 官方实例蒙太奇播放是自定义的AbilityTask,我先用更简单的方法实现效果 1.1、技能系统必要步骤: 1.1.1 插件启用AbilitySystem 1.1.2 PlayerCharacter绑定技能组件AbilitySy…...

做完这些_成为机器学习方面的专家

简单记个帖子, 用来记录学习机器学习的路线图 1. 数学分析, 高等代数, 概率论这三大件不多说, 基础中的基础. 2. 对于编程工具, b站上500集的python教程---python面向对象编程五部曲(从零到就业). 3. 对于机器学习的理论板块, 推荐b站up主---啥都会一点的研究生, 里面有一个吴恩…...

kubernetes|云原生| 如何优雅的重启和更新pod---pod生命周期管理实务

前言&#xff1a; kubernetes的管理维护的复杂性体现在了方方面面&#xff0c;例如&#xff0c;&#xff50;&#xff4f;&#xff44;的管理&#xff0c;服务的管理&#xff0c;用户的管理&#xff08;&#xff32;&#xff22;&#xff21;&#xff23;&#xff09;&#xf…...

【总结】坐标变换和过渡矩阵(易忘记)

xCy&#xff0c;此为x到y的坐标变换。 [β1,β2,…,βn] [α1,α2,…αn]C&#xff0c;此为基α到基β的过渡矩阵。 这个概念经常忘记。。。alpha到beta看来就是alpha后面加一个过渡矩阵了&#xff0c;很直观。坐标变换就是根据过渡矩阵和基本形式推一推得到吧&#xff0c;记…...

第十一周任务总结

本周任务总结 本周物联网方面主要继续进行网关的二次开发与规则引擎实现设备联动的实现 非物联网方面主要复习了docker的使用与算法的学习 1.网关的二次开发&#xff0c;本周将实现debug调试输出的文件下载到了网关&#xff0c;但网关出了问题无法连接&#xff0c;最终跟客服…...

Java Web——JavaScript基础

1. 引入方式 JavaScript程序不能独立运行&#xff0c;它需要被嵌入HTML中&#xff0c;然后浏览器才能执行 JavaScript 代码。 通过 script 标签将 JavaScript 代码引入到 HTML 中&#xff0c;有3种方式&#xff1a; 1.1. 内嵌式(嵌入式) 直接写在html文件里&#xff0c;用s…...

Vue3 toRaw 和 markRaw

一、toRaw 我们可以使用ref 和 reactive 将普通对象类型的数据变为响应式的数据。 我们可以使用toRaw 将reactive 对象的数据变为一般对象类型的数据。 使用toRaw 需要先进行引入&#xff1a; import { toRaw } from vue; 语法格式&#xff1a; const xxx toRaw(数据) set…...

麒麟信安助力长沙市就业与社保数据服务中心政务系统向自主创新演进

应用场景 长沙市就业与社保数据服务中心依托长沙市“政务云”的公共基础资源和相应的支撑能力&#xff0c;围绕社保、就业、人事人才、劳动关系等人社全量业务服务&#xff0c;力求建立以“智慧服务、智慧监管、智慧决策”为核心的“智慧人社”综合服务平台&#xff0c;实现人…...

【LeetCode刷题-双指针】--16.最接近的三数之和

16.最接近的三数之和 方法&#xff1a;排序双指针 class Solution {public int threeSumClosest(int[] nums, int target) {Arrays.sort(nums);int ans nums[0] nums[1] nums[2];for(int i 0;i<nums.length;i){int start i1,end nums.length - 1;while(start < en…...

Mac 安装 protobuf 和Android Studio 使用

1. 安装,执行命令 brew install protoc 2. Mac 错误提示&#xff1a;zsh: command not found: brew解决方法 解决方法&#xff1a;mac 安装homebrew&#xff0c; 用以下命令安装&#xff0c;序列号选择中科大&#xff08;1&#xff09;或 阿里云 /bin/zsh -c "$(curl…...

MongoDB入门级别教程全(Windows版,保姆级教程)

下载mongodb 进入官网&#xff1a; Download MongoDB Community Server | MongoDB 选择msi&#xff0c;Windows版本 下载完后直接双击&#xff1a; 选择complete 这里建议改地方&#xff1a; 我这里直接改成d盘&#xff1a;work目录下面&#xff1a; 点击next&#xff1a; 因…...

基于机器学习的居民消费影响因子分析预测

项目视频讲解: 基于机器学习的居民消费影响因子分析预测_哔哩哔哩_bilibili 主要工作内容: 完整代码: import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns import missingno as msno import warnings warnings.filterwarnin…...

Qt HTTP 摘要认证(海康球机摄像机ISAPI开发)

接到一个需求是开发下海康的球机,控制云台,给到我的是一个开发手册,当然了是海康的私有协议 ISAPI开发手册https://download.csdn.net/download/qq_37059136/88547425关于开发这块读文档就可以理解了,海康使用的是摘要认证,当然了海康已经给出使用范例 通过libcurl就可以直接连…...

srs webrtc推拉流环境搭建(公网)

本地环境搭建 官方代码https://github.com/ossrs/srs 拉取代码&#xff1a; git clone https://github.com/ossrs/srs.gitcd ./configure make ./objs/srs -c conf/https.rtc.confsrs在公网上&#xff0c;由于srs是lite-ice端&#xff0c;导致他不会主动到srs获取自己的公网i…...

【Flutter】设计原则(2)深入解析 SOLID 原则的应用

【Flutter】设计原则(2)深入解析 SOLID 原则的应用 文章目录 一、前言二、SOLID原则三、在 Flutter 中应用单一职责原则1. 专注单一功能的 Widget2. 提高代码可维护性四、在 Flutter 中应用开闭原则1. 利用多态和基类实现可扩展的 Widget2. 增强应用的可扩展性和灵活性五、在…...

python爬虫概述及简单实践:获取豆瓣电影排行榜

目录 前言 Python爬虫概述 简单实践 - 获取豆瓣电影排行榜 1. 分析目标网页 2. 获取页面内容 3. 解析页面 4. 数据存储 5. 使用代理IP 总结 前言 Python爬虫是指通过程序自动化地对互联网上的信息进行抓取和分析的一种技术。Python作为一门易于学习且强大的编程语言&…...

ts视频文件转为mp4(FFmpeg)

有些视频资源下载下来之后发现是.ts的文件&#xff0c;除了用下载它时用的工具或是浏览器才能看&#xff0c;那有没有将ts文件转换成更加通用视频格式的方法。 几乎万能的音视频工具--ffmpeg登场 安装和环境配置可看这篇博客&#xff1a;FFmpeg指令行打开usb摄像头&#xff0…...

2023年咸阳市《网络建设与运维》赛题解析------四、安全配置

安全配置 说明:IP地址按照题目给定的顺序用“ip/mask”表示,IPv4 any地址用0.0.0.0/0,IPv6 any地址用::/0,禁止用地址条目,否则按零分处理。 1.FW1配置IPv4 nat,实现集团产品1段IPv4访问Internet IPv4,转换ip/mask为200.200.200.16/28,保证每一个源IP产生的所有会话将…...

什么是java枚举?为什么要用java枚举?

什么是java枚举&#xff1f; 原始的接口定义常量 public interface IConstants {String MON "Mon";String TUE "Tue";String WED "Wed";String THU "Thu";String FRI "Fri";String SAT "Sat";String SUN …...

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具&#xff0c;要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库&#xff0c;也踩了不少坑&#xff0c;因此把代码修改过程记录一下。 开发环境&#xff1a; ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…...

准备篇(四)HTTP 基本原理

URI 和 URLURIURLURI vs URLHTTP 和 HTTPS超文本HTTPHTTP 请求与响应HTTPS你是否想过,在浏览器中敲入 URL 到 获取网页内容 之间发生了什么? 了解这些,有助于进一步了解爬虫的基本原理。 URI 和 URL URI(Uniform Resource Identifier),即统一资源标识符;URL(Universa…...