JS scrollIntoView 技巧揭秘:解锁网页流畅交互
文章目录
- 一.基本概念
- 二.语法和参数
- 基本语法:`element.scrollIntoView();`
- 参数详解:
- 三.应用场景和示例
- 场景一:点击目录点位到相应的位置
- React 示例代码:
- Vue3 示例代码:
- 场景二:轮播图定位到指定图片
- 示例代码
一.基本概念
scrollIntoView
是 JavaScript 中用于滚动元素,使其进入浏览器视口(viewport)的一个方法。它是Element
接口的一个方法,这意味着可以在任何 DOM 元素上调用它。- 例如,CSDN 中点击目录点位到相应的位置。
二.语法和参数
基本语法:element.scrollIntoView();
这里的element
是要滚动到可视区域的目标元素。这个方法可以接受一个可选的参数,这个参数是一个对象,用于更精细地控制滚动行为。
例如:element.scrollIntoView({ behavior: 'smooth', block: 'start', inline: 'nearest' });
参数详解:
behavior
:用于指定滚动行为的类型。它有两个可能的值:auto
(默认值):滚动立即发生,没有过渡动画效果。smooth
:滚动以平滑的动画效果进行,这种效果在现代浏览器中提供了更好的用户体验。
block
:用于确定元素在垂直方向(块轴)上相对于视口的对齐方式。它有以下几个可能的值:start
(默认值):将元素的顶部与视口的顶部对齐。center
:将元素的中心与视口的中心对齐。end
:将元素的底部与视口的底部对齐。nearest
:将元素滚动到离其最近的边缘与视口对应的边缘对齐。
inline
:用于确定元素在水平方向(行内轴)上相对于视口的对齐方式。它也有和block
类似的值,如start
、center
、end
、nearest
,其含义和在垂直方向上类似,只是作用于水平方向。
三.应用场景和示例
场景一:点击目录点位到相应的位置
以下实现了一个带有导航目录的页面布局,当用户点击目录中的标题时,页面会平滑滚动,使对应内容区域展示在可视范围内,方便用户快速定位到感兴趣的部分,适用于内容较长的页面场景。
React 示例代码:
目录
|-- 文件夹
|--- index.jsx
|--- index.module.less
代码
import less from './index.module.less'const ScrollView = () => {const TabsArr = [{id: 1,title: 'menu1',childrenNum: 2},{id: 2,title: 'menu2',childrenNum: 3},{id: 3,title: 'menu3',childrenNum: 5},{id: 4,title: 'menu4',childrenNum: 7},{id: 5,title: 'menu5',childrenNum: 9},{id: 6,title: 'menu6',childrenNum: 6}]const recordScroll = record => {const dom = document.getElementById(record.title)if (dom) {dom.scrollIntoView({behavior: 'smooth',block: 'start',inline: 'start'})}}return (<div className={less.scrollViewBox}><div className={less.menuBox}><div className={less.title}>目录</div>{TabsArr.map(item => {return (<div key={item.id} className={less.item} onClick={() => recordScroll(item)}>{item.title}</div>)})}</div><div className={less.pageContent}>{TabsArr.map(item => {return (<div key={item.id} className={less.item} id={item.title}>{Array.from({ length: item.childrenNum }).map((it, index) => {return (<div key={index} className={less.children}>{item.title + '-' + index}</div>)})}</div>)})}</div></div>)
}export default ScrollView
.scrollViewBox {width: 1000px;height: 800px;border: 1px solid black;display: flex;flex-direction: column;position: relative;.menuBox {width: 200px;background-color: #f0f2f5;padding: 10px 20px;box-sizing: border-box;position: absolute;top: 0;right: -205px;.title {font-size: 16px;color: #333;font-weight: bold;margin-bottom: 15px;padding-bottom: 15px;border-bottom: 1px solid black;}.item {font-size: 14px;color: #333;margin-bottom: 10px;cursor: pointer;&:hover {color: red;}}}.pageContent {width: 100%;height: 100%;display: flex;flex-direction: column;overflow: hidden;overflow-y: auto;.item {display: flex;flex-direction: row;flex-wrap: wrap;margin-bottom: 100px;.children {width: 200px;height: 200px;text-align: center;line-height: 200px;background-color: #f0f2f5;margin: 20px;}}}
}
Vue3 示例代码:
<template><div class="scrollViewBox"><div class="menuBox"><div class="title">目录</div><div v-for="(item, index) in TabsArr" :key="item.id" class="item" @click="recordScroll(index)">{{ item.title }}</div></div><div class="pageContent"><div v-for="(item) in TabsArr" :key="item.id" :id="item.title" class="item"><div v-for="(it, subIndex) in Array(item.childrenNum).fill(0)" :key="subIndex" class="children">{{ item.title + '-' + subIndex }}</div></div></div></div>
</template><script setup>const TabsArr = [{id: 1,title: 'menu1',childrenNum: 2,},{id: 2,title: 'menu2',childrenNum: 3,},{id: 3,title: 'menu3',childrenNum: 5,},{id: 4,title: 'menu4',childrenNum: 7,},{id: 5,title: 'menu5',childrenNum: 9,},{id: 6,title: 'menu6',childrenNum: 6,},
]const recordScroll = (index) => {const dom = document.getElementById(TabsArr[index].title)if (dom) {dom.scrollIntoView({behavior: 'smooth',block: 'start',inline: 'start',})}
}
</script><style scoped>
.scrollViewBox {width: 1000px;height: 800px;border: 1px solid black;display: flex;flex-direction: column;position: relative;
}.menuBox {width: 200px;background-color: #f0f2f5;padding: 10px 20px;box-sizing: border-box;position: absolute;top: 0;right: -205px;
}.title {font-size: 16px;color: #333;font-weight: bold;margin-bottom: 15px;padding-bottom: 15px;border-bottom: 1px solid black;
}.item {font-size: 14px;color: #333;margin-bottom: 10px;cursor: pointer;
}.item:hover {color: red;
}.pageContent {width: 100%;height: 100%;display: flex;flex-direction: column;overflow: hidden;overflow-y: auto;
}.item {display: flex;flex-direction: row;flex-wrap: wrap;margin-bottom: 100px;
}.children {width: 200px;height: 200px;text-align: center;line-height: 200px;background-color: #f0f2f5;margin: 20px;
}
</style>
场景二:轮播图定位到指定图片
在图片轮播组件中,通常会有底部的导航小圆点或者图片标题等元素,用于指示和切换不同的图片。当用户点击这些导航元素时,除了切换图片显示,还希望图片所在的轮播区域能自动滚动到可视范围,让用户清晰看到当前选中的图片。
示例代码
import React, { useState } from 'react'
import './Carousel.css'const Carousel = () => {const images = [{ id: 1, src: 'image1.jpg', title: 'Image 1' },{ id: 2, src: 'image2.jpg', title: 'Image 2' },{ id: 3, src: 'image3.jpg', title: 'Image 3' }]const [currentIndex, setCurrentIndex] = useState(0)const scrollToImage = index => {const imageElement = document.getElementById(`image-${index}`)if (imageElement) {imageElement.scrollIntoView({behavior: 'smooth'})}setCurrentIndex(index)}return (<div className="carousel-container"><div className="carousel-images">{images.map((image, index) => (<imgkey={image.id}id={`image-${index}`}src={image.src}alt={image.title}className="carousel-image"/>))}</div><div className="carousel-nav">{images.map((image, index) => (<spankey={index}className={`nav-dot ${index === currentIndex ? 'active' : ''}`}onClick={() => scrollToImage(index)}></span>))}</div></div>)
}export default Carousel
.carousel-container {width: 800px;height: 400px;overflow: hidden;position: relative;
}.carousel-images {width: fit-content;height: 100%;display: flex;transition: transform 0.5s ease;
}.carousel-image {width: 800px;height: 100%;object-fit: cover;
}.carousel-nav {position: absolute;bottom: 10px;left: 50%;transform: translateX(-50%);display: flex;
}.nav-dot {width: 10px;height: 10px;border-radius: 50%;background-color: #ccc;margin-right: 5px;cursor: pointer;
}.nav-dot.active {background-color: #333;
}
相关文章:
JS scrollIntoView 技巧揭秘:解锁网页流畅交互
文章目录 一.基本概念二.语法和参数基本语法:element.scrollIntoView();参数详解: 三.应用场景和示例场景一:点击目录点位到相应的位置React 示例代码:Vue3 示例代码: 场景二:轮播图定位到指定图片示例代码…...
精选2款.NET开源的博客系统
前言 博客系统是一个便于用户创建、管理和分享博客内容的在线平台,今天大姚给大家分享2款.NET开源的博客系统。 StarBlog StarBlog是一个支持Markdown导入的开源博客系统,后端基于最新的.Net6和Asp.Net Core框架,遵循RESTFul接口规范&…...
1.CSS的复合选择器
1.1 什么是复合选择器 在CSS中,可以根据选择器的类型把选择器分为基础选择器和复合选择器,复合选择器是建立在基础选择器之上,对基础选择器进行组合形成的。 复合选择器可以更精准、更高效的选择目标元素(标签) 复…...
sys.dm_exec_connections:查询与 SQL Server 实例建立的连接有关的信息以及每个连接的详细信息(客户端ip)
文章目录 引言I 基于dm_exec_connections查询客户端ip权限物理联接时间范围dm_exec_connections表see also: 监视SQL Server 内存使用量资源信号灯 DMV sys.dm_exec_query_resource_semaphores( 确定查询执行内存的等待)引言 查询历史数据库客户端ip应用场景: 安全分析缺乏…...
gitee 使用教程
前言 Gitee 是一个中国的开源代码托管平台,类似于 GitHub,旨在为开发者提供一个高效、稳定、安全的代码管理和协作开发环境。Gitee 支持 Git 协议,可以托管 Git 仓库,进行版本控制、代码协作、项目管理等操作。 1. Gitee 的主要…...
HTMLHTML5革命:构建现代网页的终极指南 - 0. 课程目录设计
结构清晰,层层递进 课程从基础知识(如HTML学前必知)开始,逐步深入到高级应用(如PWA配置和WebApp优化)。每个模块都有明确的目标,适合零基础学员逐步掌握HTML。 覆盖范围广 这套课程涵盖了HTM…...
嵌入式系统 (2.嵌入式硬件系统基础)
2.嵌入式硬件系统基础 2.1嵌入式硬件系统的组成 嵌入式硬件系统以嵌入式微处理器为核心,主要由嵌入式微处理器、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 嵌入式微处理器采用冯诺依曼结构或哈佛结构:前者指令和数据共享同一存储空间…...
Vue3轮播图的实现:vue3-carousel的使用和配置
vue3-carousel 是一个用于 Vue 3 的轻量级、响应式、功能强大的轮播组件。它允许你轻松创建可以滚动的图片或内容滑块。下面是关于如何安装、使用以及配置 vue3-carousel 的一些示例和详细说明。 目录 一、安装 vue3-carousel 二、引入 三、轮播全局样式修改 一、安装 vue3-…...
Spring AI ectorStore
Spring AI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中扮演着至关重要的角色。以下是对Spring AI VectorStore的详细解析: 一、VectorStore的基本概念 定义:VectorStore特别适用于处理那些经过嵌入…...
uniapp vue2版本如何设置i18n
如何设置i18n在该软件设置过语言的情况下优先选择所设置语言,在没有设置的情况下,获取本系统默认语言就,将系统默认语言设置为当前选择语言。 1、下载依赖: npm install vue-i18n --save 2、创建相关文件(在最外层&…...
【2024华为OD-E卷-100分-boss的收入】(题目+思路+JavaC++Python解析)
题目描述 题目:boss的收入 在一个公司中,有一个老板(boss)和若干名员工(employees)。老板和员工的收入信息存储在一个数组中,其中数组的每个元素表示一个人的收入。数组的第0个元素表示老板的…...
若依 ruoyi-vue HandlerInterceptor 拦截器 文件接口自定义权限
文件资源添加自定义权限 package com.huida.framework.config;import com.huida.framework.interceptor.FileInterceptor; import com.huida.framework.interceptor.RequestInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springfr…...
在离线环境中安装 `.rpm` 包的步骤
在一些环境中,可能无法直接通过网络安装软件包。特别是在没有互联网连接的情况下,我们仍然可以手动下载 .rpm 安装包并进行离线安装。本文将介绍如何在离线环境中安装多个 .rpm 包,确保软件的顺利安装和依赖关系的处理。 1. 将 .rpm 文件复制…...
Python----Python爬虫(selenium的使用,定位元素,层级定位)
一、介绍与安装 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium 可以直接运行在浏览器上,它支持所有主流的浏览器。 Sele…...
Docker 服务、镜像、容器之命令(Docker Services, Images, and Container Commands)
Docker 服务、镜像、容器之命令 Docker是一个强大的容器化平台,能够帮助开发者高效地构建、部署和管理应用程序。本文将详细介绍Docker的服务命令、镜像命令和容器命令,帮助你快速上手Docker。 一、Docker的服务相关命令 在使用Docker之前,…...
当歌 - RSS 订阅分发平台开发
以下将详细介绍当歌平台的技术架构、功能实现以及相关代码逻辑。 一、项目概述 当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。 二、技术架构 后端语言:PHP 数据库&#…...
vue3使用AntV X6 (图可视化引擎)历程[二]
通过h函数动态展示自定义节点内容 一、案例效果 二、案例代码 父组件. BloodTopology.vue <template><div><TopologyCompact><template #main-board-box><TopologyDependent domId"featureBloodContainer" :nodeData"originalNode…...
爬虫学习记录
1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…...
Erlang语言的函数实现
Erlang语言函数实现的深度探讨 引言 Erlang是一种并发编程语言,最初由爱立信公司为电信系统开发。它以其强大的并发处理能力和容错机制而闻名,广泛应用于实时系统和分布式系统。本文将详细探讨Erlang语言中的函数实现,包括函数的定义、调用…...
LLM之RAG实战(五十一)| 使用python和Cypher解析PDF数据,并加载到Neo4j数据库
一、必备条件: python语言Neo4j数据库python库:neo4j、llmsherpa、glob、dotenv 二、代码: from llmsherpa.readers import LayoutPDFReaderfrom neo4j import GraphDatabaseimport uuidimport hashlibimport osimport globfrom datetime …...
单例模式-如何保证全局唯一性?
以下是几种实现单例模式并保证全局唯一性的方法: 1. 饿汉式单例模式 class Singleton { private:// 私有构造函数,防止外部创建对象Singleton() {}// 静态成员变量,存储单例对象static Singleton instance; public:// 公有静态成员函数&…...
05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
Docker学习,常用安装:Mysql、Redis、Nginx、Nacos 一、Docker安装Mysql 1、docker search mysql ##查找mysql版本都有哪些 2、docker pull mysql:5.6 ##下载5.6版本的mysql镜像 3、docker run -p 13306:3306 --name mysql ##运行…...
docker 启动redis 守护进程
文章目录 前言一、整体流程二、状态图三、结语 前言 在现代软件开发中,缓存和消息队列是提高应用性能和扩展性的关键。Redis 是一种流行的内存数据结构存储系统,它支持多种类型的数据结构,如字符串、哈希、列表、集合、有序集合等。使用 Doc…...
Angular由一个bug说起之十三:Cross Origin
跨域 想要了解跨域,首要要了解源 什么是源,源等于协议加域名加端口号 只有这三个都相同,才是同源,反之则是非同源。 比如下面这四个里,只有第4个是同源 而浏览器给服务器发送请求时,他们的源一样࿰…...
为深度学习引入张量
为深度学习引入张量 什么是张量? 神经网络中的输入、输出和转换都是使用张量表示的,因此,神经网络编程大量使用张量。 张量是神经网络使用的主要数据结构。 张量的概念是其他更具体概念的数学概括。让我们看看一些张量的具体实例。 张量…...
opencv摄像头标定程序实现
摄像头标定是计算机视觉中的一个重要步骤,用于确定摄像头的内参(如焦距、主点、畸变系数等)和外参(如旋转矩阵和平移向量)。OpenCV 提供了方便的工具来进行摄像头标定。下面分别给出 C 和 Python 的实现。 1. C 实现…...
Flutter:封装一个自用的bottom_picker选择器
效果图:单列选择器 使用bottom_picker: ^2.9.0实现,单列选择器,官方文档 pubspec.yaml # 底部选择 bottom_picker: ^2.9.0picker_utils.dart AppTheme:自定义的颜色 TextWidget.body Text() <Widget>[].toRow Row()下边代…...
Docker 容器自动化管理之脚本(Script for Docker Container Automation Management)
Docker 容器自动化管理之脚本 简介 Docker是一个开源的容器化平台,旨在简化应用程序的开发、部署和运行过程。它通过将应用程序及其依赖项打包到一个可移植的容器中,使得开发人员能够在不同的环境中以一致的方式构建、打包和分发应用程序。 Docke…...
client-go中watch机制的一些陷阱
Reference https://stackoverflow.com/questions/51399407/watch-in-k8s-golang-api-watches-and-get-events-but-after-sometime-doesnt-get-an 问题描述 最近在使用 client-go 的 watch 机制监听 k8s 中的 deployment 资源时,发现一个奇怪的现象 先看下代码&a…...
用户界面的UML建模11
然而,在用户界面方面,重要的是要了解《boundary》类是如何与这个异常分层结构进行关联的。 《exception》类的对象可以作为《control》类的对象。因此,《exception》类能够聚合《boundary》类。 参见图12,《exception》Database…...
计算机网络之---数据链路层的功能与作用
数据链路层概念 数据链路层(Data Link Layer)是计算机网络中的第二层,它位于物理层和网络层之间,主要负责数据在物理链路上的可靠传输。其基本功能是将网络层传来的数据分成帧,并负责在物理链路上可靠地传输这些数据帧…...
添加到 PATH 环境变量中
命令解释 # 将命令中的<CLI_PATH>替换为您aliyun文件的所在目录。 echo export PATH$PATH:<CLI_PATH> >> ~/.bash_profile echo export PATH$PATH:/data2/ljsang/aliyun/aliyun >> ~/.bash_profileexport PATH$PATH:/data2/ljsang/aliyun/aliyun&…...
【51单片机零基础-chapter6:LCD1602调试工具】
实验0-用显示屏LCD验证自己的猜想 如同c的cout,前端的console.log() #include <REGX52.H> #include <INTRINS.H> #include "LCD1602.h" int var0; void main() {LCD_Init();LCD_ShowNum(1,1,var211,5);while(1){;} }实验1-编写LCD1602液晶显示屏驱动函…...
Linux 内核中的 netif_start_queue 函数:启动网络接口发送队列的关键
在 Linux 内核的网络子系统中,netif_start_queue 函数扮演着至关重要的角色。这个函数的主要功能是启动(或启用)网络接口的发送队列,标志着网络接口已经准备好开始发送数据包。本文将深入探讨 netif_start_queue 函数的用途、工作原理以及在实际网络驱动代码中的应用。 函…...
(七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络
零、开篇趣谈 还记得第一次用支付宝"刷脸"时的新奇感吗?或者被抖音的人脸特效逗乐的瞬间?这些有趣的应用背后,其实藏着一个精妙的AI世界。今天,就让我们开启一段奇妙的人脸识别技术探索之旅吧! 一、人脸识…...
ExcelDataReader:一个.Net高性能Excel开源读取器
推荐一个用于读取Microsoft Excel文件的高性能开源库。 01 项目简介 ExcelDataReader是一个功能强大且易于使用的开源项目,提供了丰富的读取API,专门读取Excel文件的数据,特别是处理大数据量的情况。 ExcelDataReader支持Excel版本从2007年…...
人工智能-机器学习之多元线性回归(项目实践一)
目标:运用scikit-learn进行多元线性回归方程的构建,通过实际案例的训练集和测试集进行预测,最终通过预测结果和MSE来评估预测的精度。 一、首先安装scikit-learn:pip install scikit-learn C:\Users\CMCC\PycharmProjects\AiPro…...
Mysql--基础篇--约束(主键,外键,唯一,检查,枚举及复合约束等)
在MySQL中,约束(Constraints)是用于确保数据库中数据完整性和一致性的规则。通过定义约束,可以防止用户插入、更新或删除不符合特定条件的数据,从而保证数据的准确性和可靠性。MySQL支持多种类型的约束,每种…...
经典多模态模型CLIP - 直观且详尽的解释
对比语言-图像预训练(CLIP),这是一种创新的多模态建模策略,能够创建视觉和语言的联合表示。CLIP 的效果非常出色,可以用于构建高度特定且性能卓越的分类器,而无需任何训练数据。本文将深入探讨其理论基础&a…...
着丝粒鉴定CentIER v3.0安装与使用-bioinfomatics tools41
使用CentIE鉴定着丝粒 T2T基因组端粒与着丝粒的区别及其鉴定方法-随笔02_chip-seq鉴定着丝粒-CSDN博客 T2T时代的基因组组装-文献精读-9_基因组t2t组装-CSDN博客 桑树T2T基因组-文献精读16_桑树基因组-CSDN博客 辣椒属2个T2T基因组-文献精读23_辣椒基因组-CSDN博客 大花…...
Objective-C语言的多线程编程
Objective-C语言的多线程编程 在现代应用程序开发中,尤其是移动应用开发,多线程编程是一个不可或缺的部分。使用多线程可以提升应用的响应能力,使得可以同时处理多个任务,从而优化用户体验。在本文中,我们将深入探讨O…...
Golang的并发编程框架比较
# Golang的并发编程框架比较 中的并发编程 在现代软件开发中,处理高并发的能力愈发重要。Golang作为一门支持并发编程的编程语言,提供了丰富的并发编程框架和工具,使得开发者能够更轻松地处理并发任务。本文将介绍Golang中几种常用的并发编程…...
通过 oh-my-posh posh-git 优化PowerShell
转自oh-my-posh & posh-git 提升在 windows 环境的开发体验 oh-my-posh 是用于自定义 PowerShell 主题和配色的工具,posh-git 则是为 PowerShell 提供了方便的 git 状态显示和命令补全功能。 安装PowerShell 7和 winget下载器,都可以直接在 Microsof…...
【Linux系列】Vim 编辑器中的高效文本编辑技巧:删除操作
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
慧集通(DataLinkX)iPaaS集成平台-连接器
如何创建连接器? 连接器是用于跟各系统进行连接,是集成交互的基础构成也是主要构成之一;连接器一般是根据业务系统的开放的不同方式由开发人员进行封装,封装完成后交付人员可以在所有连接那里建立对应的连接,连接需要…...
vue3使用vue3-video-play播放m3u8视频
1.安装vue3-video-play npm install vue3-video-play --save2.在组件中使用 import vue3-video-play/dist/style.css; import VideoPlay from vue3-video-play;// 视频配置项 const options reactive({src: https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8, //视频源mute…...
单片机-外部中断
中断是指 CPU 在处理某一事件 A 时,发生了另一事件 B,请求 CPU 迅速去处理(中断发生);CPU 暂时停止当前的工作(中断响应), 转去处理事件 B(中断服务);待 CPU 将事件 B 处理完毕后,再回到原来事件 A 被中断的…...
《C++11》右值引用深度解析:性能优化的秘密武器
C11引入了一个新的概念——右值引用,这是一个相当深奥且重要的概念。为了理解右值引用,我们需要先理解左值和右值的概念,然后再理解左值引用和右值引用。本文将详细解析这些概念,并通过实例进行说明,以揭示右值引用如何…...
【HTML+CSS+JS+VUE】web前端教程-1-VScode开发者工具快捷键
VScode打开文件夹与创建文件 1、选择文件夹 2、拖拽文件夹 生成浏览器文件.html的快捷方式 ! 回车vscode常用快捷键列表 代码格式化:shift alt F 向上或向下移动一行: alt up 或者 alt down 快速复制一行代码:shift alt up 或者 sh…...
【嵌入式硬件】直流电机驱动相关
项目场景: 驱动履带车(双直流电机)前进、后退、转弯 问题描述 电机驱动MOS管烧毁 电机驱动采用IR2104STRH1R403NL的H桥方案(这是修改之后的图) 原因分析: 1.主要原因是4路PWM没有限幅,修改…...