Javascript代码库-jQuery入门

摘自千锋教育kerwin的js教程

  • jQuery 是一个前端库,也是一个方法库
  • 他里面封装着一些列的方法供我们使用
  • 我们常用的一些方法它里面都有,我们可以直接拿来使用就行了
  • jQuery 之所以好用,很多人愿意使用,是因为他的几个优点太强大了
    1. 优质的选择器和筛选器
    2. 好用的隐式迭代
    3. 强大的链式编程
  • 因为这些东西的出现,很多时候我们要做的事情被 “一行代码解决”
  • 接下来我们就来认识一下 jQuery

01、使用jQuery

  • jQuery官网

  • jQuery方法大全中文网

    • 这个网站可以多看看
    • 里面是 jQuery 的方法大全,而且是中文的
  • 我们要使用 jQuery 首先要下载一个

    • 可以去官网下载
  • 然后就是再页面里面引入 jQuery.js 就行了

  • jQuery 向全局暴露的接口就是 jQuery 或者 $ 都行

    <body><div id="box"><ul><li>1</li><li>1</li><li>1</li><li>1</li></ul></div><script src="./lib/jquery-3.7.1.js"></script><script>const el = jQuery('#box');console.log(el);console.log($('ul li'));</script>
    </body>
    

02、选择器和筛选器

2.1、基本选择器

jQuery 有着相当强大的选择器

  • 按照 id 来获取元素
    // 按照 id 获取页面中的元素
    const el = jQuery('#box') 
    const el = $('#box')
    
  • 按照类名来选择元素,可以获取到一组元素
    // 按照类名来选择
    const els = jQuery('.a')
    const els = $('.a')
    
  • 按照标签名来获取元素,可以获取到一组元素
    const lis = jQuery('li')
    const lis = $('li')
    
  • 按照选择器来获取元素,可以获取到一组元素
    const els = jQuery('ul > li')
    const els = $('ul > li')
    
2.2、特殊选择器
  • 直接找到第一个

    $('li:first') // 找到所有 li 中的第一个
    
  • 直接找到最后一个

    $('li:last') // 找到所有 li 中的最后一个
    
  • 直接找到第几个

    $('li:eq(3)') // 找到所有 li 中索引为 3 的那个
    
  • 找到所有奇数个

    $('li:odd') // 找到所有 li 中索引为 奇数 的
    
  • 找到所有偶数

    $('li:even') // 找到所有 li 中索引为 偶数 的
    
2.3、筛选器(链式调用)
  • jQuery 的筛选器就是在选择器选择到一组元素以后

  • 对元素进行筛选,也可以对准确的某一个元素进行判断和获取

    1. 找到所有元素中的第一个

      $('li').first()
      
    2. 找到所有元素中的最后一个

      $('li').last()
      
    3. 找到某一个元素的下一个兄弟元素

      $('li:eq(3)').next()
      
    4. 找到某一个元素的上一个兄弟元素

      $('li:eq(3)').prev()
      
    5. 找到某一个元素的后面的所有兄弟元素

      $('li:eq(3)').nextAll()
      
    6. 找到某一个元素的前面的所有兄弟元素

      $('li:eq(3)').prevAll()
      
    7. 找到某一个元素的父元素

      	$('li:eq(3)').parent()
      

      同理。children找孩子

      $('li:eq(3)').children()
      

      siblings是找兄弟姐妹,不分前后

    8. 找到某一个元素的所有结构父级,一直到 html

      $('li:eq(3)').parents()
      
    9. 找到一组元素中的某一个

      // 在 li 的所有父级里面找到所有 body 标签
      $('li').parents().find('body')// 找到 div 标签下所有后代元素中所有类名为 box 的元素
      $('div').find('.box')
      

3、属性操作

pro能做的attr都能做

  • 给一个元素添加某个属性

    // 给 div 元素添加一个 id 属性,值是 box
    $('div').prop('id', 'box')
    // 获取 div 的 id 属性
    console.log($('div').prop('id'))
    
    • prop 这个方法只能添加元素自己本身就有的属性
    • 如果是添加的自定义属性,不会显示在标签上,但是可以使用
  • 给一个元素添加某个自定义属性

    // 给 div 添加一个 index 属性,值是 1
    $('div').attr('index', 1)
    // 获取 div 的 index 属性
    console.log($('div').attr('index'))
    
  • 移除元素的某一个属性
    removeProp无法移除自带属性

    // 移除元素自己本身的属性
    $('div').removeAttr('id')
    // 移除元素的自定义属性
    $('div').removeAttr('index')
    

4.操作元素的类名

// 判断某一个元素有没有某一个 class
$('div').hasClass('box') // true 表示该元素有 box 类名,false 表示该元素没有 box 类名// 给元素添加一个类名
$('div').addClass('box2') // 给 div 元素添加一个 box2 类名// 移除元素的类名
$('div').removeClass('box') // 移除 div 的 box 类名// 切换元素类名
$('div').toggleClass('box3') // 如果元素本身有这个类名就移除,本身没有就添加

5. 操作元素的内容

给元素的 innerHTML 赋值
$('div').html('<span>hello world</span>')
// 获取元素的 innerHTML
$('div').html()// 给元素的 innerText 赋值
$('div').text('hello world')
// 获取元素的 innerText
$('div').text()// 给元素的 value 赋值
$('input').val('admin')
// 获取元素的 value 值
$('input').val()

6. 操作样式

  • jQuery 操作元素的样式就是一个方法 css

    // 给元素设置一个 css 样式
    $('div').css('width', '100px')// 获取元素的某一个样式
    $('div').css('width')// 给元素设置一组样式
    $('div').css({width: '100px',height: '200px'
    })
    

7. 元素位置

  • 元素相对页面的位置

    // 获取 div 相对页面的位置
    $('div').offset() // 得到的是以一个对象 { left: 值, top: 值 }// 给 div 设置相对页面的位置
    $('div').offset({ left: 100, top: 100 })
    // 获取定位到一个距离页面左上角 100 100 的位置
    
  • 元素相对于父元素的偏移量

    // 获取 div 相对于父元素的偏移量(定位的值)
    $('div').position()
    
  • 获取页面卷去的高度和宽度

    window.onscroll = function () {// 获取浏览器卷去的高度console.log($(window).scrollTop())
    }window.onscroll = function () {// 获取浏览器卷去的宽度console.log($(window).scrollLeft())
    }
    

8. 元素尺寸

  • 操作元素的宽和高

    // 获取 div 元素内容位置的高,不包含 padding 和 border
    $('div').height()
    // 设置 div 内容位置的高为 200px
    $('div').height(200)// 获取 div 元素内容位置的宽,不包含 padding 和 border
    $('div').width()
    // 设置 div 内容位置的宽为 200px
    $('div').width(200)
    
  • 获取元素的内置宽和高

    // 获取 div 元素内容位置的高,包含 padding 不包含 border
    $('div').innerHeight()// 获取 div 元素内容位置的宽,包含 padding 不包含 border
    $('div').innerWidth()
    
  • 获取元素的外置宽和高

    // 获取 div 元素内容位置的高,包含 padding 和 border
    $('div').outerHeight()
    // 获取 div 元素内容位置的高,包含 padding 和 border 和 margin
    $('div').outerHeight(true)// 获取 div 元素内容位置的宽,包含 padding 和 border
    $('div').outerWidth()
    // 获取 div 元素内容位置的高,包含 padding 和 border 和 margin
    $('div').outerWidth(true)
    

9. 元素事件

  • 绑定事件的方法

    // 给 button 按钮绑定一个点击事件
    $('button').on('click', function () {console.log('我被点击了')
    })// 给 button 按钮绑定一个点击事件,并且携带参数
    $('button').on('click', { name: 'Jack' }, function (e) {console.log(e) // 所有的内容都再事件对象里面console.log(e.data) // { name: 'Jack' }
    })// 事件委托的方式给 button 绑定点击事件
    $('div').on('click', 'button', function () {console.log(this) // button 按钮
    })// 事件委托的方式给 button 绑定点击事件并携带参数
    $('div').on('click', 'button', { name: 'Jack' }, function (e) {console.log(this) // button 按钮console.log(e.data)
    })
    
  • 移除事件

    // 给 button 按钮绑定一个 点击事件,执行 handler 函数
    $('button').on('click', handler)// 移除事件使用 off
    $('button').off('click', handler)// 移除所有事件$('button').off()
    
  • 只能执行一次的事件

    // 这个事件绑定再 button 按钮身上
    // 当执行过一次以后就不会再执行了
    $('button').one('click', handler)
    
  • 直接触发事件

    // 当代码执行到这里的时候,会自动触发一下 button 的 click 事件
    $('button').trigger('click')
    

可以直接使用的常见事件

  • 可以直接使用的事件就是可以不利用 on 来绑定,直接就可以使用的事件方法

  • click

    // 直接给 div 绑定一个点击事件
    $('div').click(function () {console.log('我被点击了')
    })// 给 div 绑定一个点击事件并传递参数
    $('div').click({ name: 'Jack' }, function (e) {console.log(e.data)
    })
    
  • dblclick

    // 直接给 div 绑定一个双击事件
    $('div').dblclick(function () {console.log('我被点击了')
    })// 给 div 绑定一个双击事件并传递参数
    $('div').dblclick({ name: 'Jack' }, function (e) {console.log(e.data)
    })
    
  • scroll

    // 直接给 div 绑定一个滚动事件
    $('div').scroll(function () {console.log('我被点击了')
    })// 给 div 绑定一个滚动事件并传递参数
    $('div').scroll({ name: 'Jack' }, function (e) {console.log(e.data)
    })
    

10.动画

  • show

    // 给 div 绑定一个显示的动画
    $('div').show() // 如果元素本身是 display none 的状态可以显示出来// 给 div 绑定一个显示的动画
    // 接受三个参数
    // $('div').show('毫秒', '速度', '回调函数') 
    $('div').show(1000, 'linear', function () {console.log('我显示完毕')
    }) 
    
  • hide

    // 给 div 绑定一个隐藏的动画
    $('div').hide() // 如果元素本身是 display block 的状态可以隐藏起来// 给 div 绑定一个显示的动画
    // 接受三个参数
    // $('div').show('毫秒', '速度', '回调函数') 
    $('div').hide(1000, 'linear', function () {console.log('我隐藏完毕')
    }) 
    
  • toggle

    // 给 div 绑定一个切换的动画
    $('div').hide() // 元素本身是显示,那么就隐藏,本身是隐藏那么就显示// 给 div 绑定一个显示的动画
    // 接受三个参数
    // $('div').show('毫秒', '速度', '回调函数') 
    $('div').toggle(1000, 'linear', function () {console.log('动画执行完毕')
    }) 
    
  • slideDown/slideUp/slideToggle(卷动)

  • fadeIn/fadeOut/fadeToggle(淡入淡出)

  • fadeTo(指定透明度)

  • animate

    // 定义一个自定义动画
    $('.show').click(function () {$('div').animate({width: 500,height: 300}, 1000, 'linear', function () {console.log('动画运动完毕')})
    })
    
  • stop

    // 立刻定制动画
    $('div').stop() // 就停止再当前状态
    
  • finish

    // 立刻结束动画
    $('div').finish() // 停止在动画结束状态
    

11. 元素操作

  • 创建一个元素

    var div = $('<div></div>')
    
  • 内部插入元素

    // 向 div 元素中插入一个 p 元素,放在最后
    $('div').append($('<p></p>'))// 把 p 元素插入到 div 中去,放在最后
    $('<p>hello</p>').appendTo($('div'))// 向 div 元素中插入一个 p 元素,放在最前
    $('div').prepend($('<p></p>'))// 把 p 元素插入到 div 中去,放在最前
    $('<p>hello</p>').prependTo($('div'))
    
  • 外部插入元素

    // 在 div 的后面插入一个元素 p
    $('div').after($('<p></p>'))// 在 div 的前面插入一个元素 p
    $('div').before($('<p></p>'))// 把 p元素插入到 div 元素的后面$('<p></p>').insertAfter($(‘div’))// 把 div 元素插入到 p 元素的前面
    $('<p></p>').insertBefore($('div'))
    
  • 替换元素

    // 把 div 元素替换成 p 元素
    $('div').replaceWith($('<p></p>'))// 用 p 元素替换掉 div 元素
    $('<p></p>').replaceAll($('div'))
    
  • 删除元素

    // 删除元素下的所有子节点
    $('div').empty()// 把自己从页面中移除
    $('div').remove()
    
  • 克隆元素

    // 克隆一个 li 元素
    // 接受两个参数
    //   参数1: 自己身上的事件要不要复制,默认是 false
    //   参数2: 所有子节点身上的事件要不要复制,默认是 true
    $('li').clone()
    

12. 发送 ajax 请求

  • 发送 get 请求

    // 直接使用 $.get 方法来发送一个请求
    /*参数一: 请求地址参数二: 请求时携带的参数参数三: 请求成功的回调参数四: 返回的数据类型
    */
    $.get('./ajax.php', { id: 10 }, function (res) { console.log(res) }, 'json')
    
  • 发送 post 请求

    // 直接使用 $.post 方法来发送一个请求
    /*参数一: 请求地址参数二: 请求时携带的参数参数三: 请求成功的回调参数四: 返回的数据类型
    */
    $.post('./ajax.php', { id: 10 }, function (res) { console.log(res) }, 'json')
    
  • 综合发送 ajax 请求

    // 使用 $.ajax 方法
    // 只接受一个参数,是一个对象,这个对象对当前的请求进行所有的配置
    $.ajax({url: './ajax',   // 必填,请求的地址type: 'GET',   // 选填,请求方式,默认是 GET(忽略大小写)data: {},   // 选填,发送请求是携带的参数dataType: 'json',   // 选填,期望返回值的数据类型async: true,   // 选填,是否异步,默认是 truesuccess () {},   // 选填,成功的回调函数error () {},   // 选填,失败的回调函数cache: true,   // 选填,是否缓存,默认是 truecontext: div,   // 选填,回调函数中的 this 指向,默认是 ajax 对象status: {},   // 选填,根据对应的状态码进行函数执行timeout: 1000,   // 选填,超时事件
    })
    
  • 发送一个 jsonp 请求

    // 使用 $.ajax 方法也可以发送 jsonp 请求
    // 只不过 dataType 要写成 jsonp
    $.ajax({url: './jsonp.php',dataType: 'jsonp',data: { name: 'Jack', age: 18 },success (res) {console.log(res)},jsonp: 'cb',  // jsonp 请求的时候回调函数的 keyjsonpCallback: 'fn'   // jsonp 请求的时候回调函数的名称
    })
    

13. 全局 ajax 函数

  • 全局的 ajax 函数我们也叫做 ajax 的钩子函数
  • 也就是在一个 ajax 的整个过程中的某一个阶段执行的函数
  • 而且每一个 ajax 请求都会触发
ajaxStart
  • 任意一个请求在 开始 的时候就会触发这个函数

    $(window).ajaxStart(function () {console.log('有一个请求开始了')
    })
    
ajaxSend
  • 任意一个请求在 准备 send 之前 会触发这个函数

    $(window).ajaxSend(function () {console.log('有一个要发送出去了')
    })
    
ajaxSuccess
  • 任意一个请求在 成功 的时候就会触发这个函数

    $(window).ajaxSuccess(function () {console.log('有一个请求成功了')
    })
    
ajaxError
  • 任意一个请求在 失败 的时候就会触发这个函数

    $(window).ajaxError(function () {console.log('有一个请求失败了')
    })
    
ajaxComplete
  • 任意一个请求在 完成 的时候就会触发这个函数

    $(window).ajaxComplete(function () {console.log('有一个请求完成了')
    })
    
ajaxStop
  • 任意一个请求在 结束 的时候就会触发这个函数

    $(window).ajaxStop(function () {console.log('有一个请求结束了')
    })
    

14. jQuery深浅拷贝

14.1 js实现深拷贝
function deepCopy(o2, o1) {for (var i in o1) {if (o1[i]?.toString === "[object Object]") {o2[i] = {};deepCopy(o2[i], o1[i]);} else if (Object.prototype.toString.call(o1[i]) === "[object Array]") {o2[i] = [];deepCopy(o2[i], o1[i]);} else {o2[i] = o1[i];}}
}
// 这种复制遇到undefine会出问题
var obj2 = JSON.parse(JSON.stringify(obj1));
jQuery方法

也会舍弃undefine的参数

 // 深拷贝true,浅拷贝就不写第一个参数
//  targetObj在堆空间中重新开辟一个空间指向自己对象的引用
// 注:后边可以跟一个或多个参数,都会将他们包括 obj obj1都拷贝到target里头去
$.extend(true, targetObj, obj, obj1...);

14.jQuery 的多库共存

  • 我们一直在使用 jQuery,都没有什么问题

  • 但是如果有一天,我们需要引入一个别的插件或者库的时候

  • 人家也向外暴露的是 $ 获取 jQuery

  • 那么,我们的 jQuery 就不能用了

  • 那么这个时候,jQuery 为我们提供了一个多库并存的方法

    // 这个方法可以交还 jQuery 命名的控制权
    jQuery.noConflict()// 上面代码执行完毕以后 $ 这个变量就不能用了
    // 但是 jQuery 可以使用
    console.log($) // undefined
    console.log(jQuery) // 可以使用
    
  • 完全交出控制权

    // 这个方法可以交并且传递一个 true 的时候,会完全交出控制权
    jQuery.noConflict(true)// 上面代码执行完毕以后 $ 这个变量就不能用了
    // jQuery 这个变量也不能用了
    console.log($) // undefined
    console.log(jQuery) // undefined
    
  • 更换控制权

    // 可以用一个变量来接受返回值,这个变量就是新的控制权
    var aa = jQuery.noConflict(true)// 接下来就可以把 aa 当作 jQuery 向外暴露的接口使用了
    aa('div').click(function () { console.log('我被点击了') })
    

15 . JQuery 的插件扩展

  • jQuery 确实很好很强大
  • 但是也有一些方法是他没有的,我们的业务需求中有的时候会遇到一些它里面没有的方法
  • 那么我们就可以给他扩展一些方法
扩展给他自己本身
  • 扩展给自己本身使用 jQuery.extend 这个方法

  • 扩展完后的内容只能用 $ 或者 jQuery 来调用

    // jQuery.extend 接受一个参数,是一个对象,对象里面是我们扩展的方法
    jQuery.extend({max: function (...n) { return Math.max.apply(null, n) },min: function (...n) { return Math.min.apply(null, n) }
    })
    
  • 扩展完毕我们就可以使用了

    const max = $.max(4, 5, 3, 2, 6, 1)
    console.log(max) // 6
    const min = $.min(4, 5, 3, 2, 6, 1)
    console.log(min) // 1
    
扩展给元素集
  • 扩展完毕以后给元素的集合使用

  • 也就是我们用 $('li') 这样的选择器获取到的元素集合来使用

  • 使用 jQuery.fn.extend() 方法来扩展

    // jQuery.fn.extend() 接受一个参数,是一个对象,对象里面是我们扩展的方法
    jQuery.fn.extend({checked: function () {// return 关键字是为了保证链式编程// 后面的代码才是业务逻辑return this.each(function() { this.checked = true })}
    })
    
  • 扩展完毕我们就可以使用了

    // 靠元素集合来调用
    $('input[type=checkbox]').checked()
    // 执行完毕之后,所有的 复选框 就都是选中状态了
    

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

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

相关文章

解析 Oracle 中的 ALL_SYNONYMS 和 ALL_VIEWS 视图:查找同义词与视图的基础操作

目录 前言1. ALL_SYNONYMS 视图2. ALL_VIEWS 视图3. 扩展 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 1. ALL_SYNONYMS 视图 在 Oracle 数据库中&#xff0c;同义词&#xff08;Synonym&#xff09;是对数…

DeepSeek-R1 本地部署教程(超简版)

文章目录 一、DeepSeek相关网站二、DeepSeek-R1硬件要求三、本地部署DeepSeek-R11. 安装Ollama1.1 Windows1.2 Linux1.3 macOS 2. 下载和运行DeepSeek模型3. 列出本地已下载的模型 四、Ollama命令大全五、常见问题解决附&#xff1a;DeepSeek模型资源 一、DeepSeek相关网站 官…

【C语言入门】解锁核心关键字的终极奥秘与实战应用(二)

目录 一、sizeof 1.1. 作用 2.2. 代码示例 二、const 2.1. 作用 2.2. 代码示例 三、signed 和 unsigned 3.1. 作用 3.2. 代码示例 四、struct、union、enum 4.1. struct&#xff08;结构体&#xff09; 4.1.1. 作用 4.1.2. 代码示例 4.2. union&#xff08;联合…

如何确认Linux嵌入式系统的触摸屏对应的是哪个设备文件?如何查看系统中所有的输入设备?输入设备的设备文件有什么特点?

Linux嵌入式系统的输入设备的设备文件有什么特点&#xff1f; 在 Linux 中&#xff0c;所有的输入设备&#xff08;如键盘、鼠标、触摸屏等&#xff09;都会被内核识别为 输入事件设备&#xff0c;并在 /dev/input/ 目录下创建相应的 设备文件&#xff0c;通常是&#xff1a; …

ESP32-c3实现获取土壤湿度(ADC模拟量)

1硬件实物图 2引脚定义 3使用说明 4实例代码 // 定义土壤湿度传感器连接的模拟输入引脚 const int soilMoisturePin 2; // 假设连接到GPIO2void setup() {// 初始化串口通信Serial.begin(115200); }void loop() {// 读取土壤湿度传感器的模拟值int sensorValue analogRead…

Hive:窗口函数(1)

窗口函数 窗口函数OVER()用于定义一个窗口&#xff0c;该窗口指定了函数应用的数据范围 对窗口数据进行分区 partition by 必须和over () 一起使用, distribute by经常和sort by 一起使用,可以不和over() 一起使用.DISTRIBUTE BY决定了数据如何分布到不同的Reducer上&#xf…

【react-redux】react-redux中的 useDispatch和useSelector的使用与原理解析

一、useSelector 首先&#xff0c;useSelector的作用是获取redux store中的数据。 下面就是源码&#xff0c;感觉它的定义就是首先是createSelectorHook这个方法先获得到redux的上下文对象。 然后从上下文对象中获取store数据。然后从store中得到选择的数据。 2、useDispatc…

java异常处理——try catch finally

单个异常处理 1.当try里的代码发生了catch里指定类型的异常之后&#xff0c;才会执行catch里的代码&#xff0c;程序正常执行到结尾 2.如果try里的代码发生了非catch指定类型的异常&#xff0c;则会强制停止程序&#xff0c;报错 3.finally修饰的代码一定会执行&#xff0c;除…

传输层协议 UDP 与 TCP

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 一&#xff1a;&#x1f525; 前置复盘&#x1f98b; 传输层&#x1f98b; 再谈端口号&#x1f98b; 端口号范围划分&#x1f98b; 认识知名端口号 (Well-Know Port Number) 二&#xf…

The Simulation技术浅析(三):数值方法

The Simulation ,通常涉及使用数值方法对物理、工程或金融等领域的问题进行建模和求解。数值方法是解决复杂数学问题的关键技术,常见的数值方法包括 有限差分法(FDM)、有限元法(FEM) 和 蒙特卡洛方法(Monte Carlo Method)。 1. 有限差分法(FDM) 有限差分法是一种用于…

深度学习-98-大语言模型LLM之基于langchain的代理create_react_agent工具

文章目录 1 Agent代理1.1 代理的分类1.2 ReAct和Structured chat2 代理应用ReAct2.1 创建工具2.1.1 嵌入模型2.1.2 创建检索器2.1.3 测试检索结果2.1.4 创建工具列表2.2 初始化大模型2.3 创建Agent2.4 运行Agent3 参考附录1 Agent代理 Agent代理的核心思想是使用语言模型来选择…

小试牛刀,AI技术实现高效地解析和转换多种文档格式

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作&#xff0c;主要擅长领域有&#xff1a;python…

WPF进阶 | WPF 动画特效揭秘:实现炫酷的界面交互效果

WPF进阶 | WPF 动画特效揭秘&#xff1a;实现炫酷的界面交互效果 前言一、WPF 动画基础概念1.1 什么是 WPF 动画1.2 动画的基本类型1.3 动画的核心元素 二、线性动画详解2.1 DoubleAnimation 的使用2.2 ColorAnimation 实现颜色渐变 三、关键帧动画深入3.1 DoubleAnimationUsin…

自制虚拟机(C/C++)(三、做成标准GUI Windows软件,扩展指令集,直接支持img软盘)

开源地址:VMwork 要使终端不弹出&#xff0c; #pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") 还要实现jmp near 0x01类似的 本次的main.cpp #include <graphics.h> #include <conio.h> #include <windows.h> #includ…

tomcat核心组件及原理概述

目录 1. tomcat概述 1.1 概念 1.2 官网地址 2. 基本使用 2.1下载 3. 整体架构 3.1 核心组件 3.2 从web.xml配置和模块对应角度 3.3 如何处理请求 4. 配置JVM参数 5. 附录 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一个开源、免费、轻量级的Web服务器。 Tomca…

docker gitlab arm64 版本安装部署

前言&#xff1a; 使用RK3588 部署gitlab 平台作为个人或小型团队办公代码版本使用 1. docker 安装 sudo apt install docker* 2. 获取arm版本的gitlab GitHub - zengxs/gitlab-arm64: GitLab docker image (CE & EE) for arm64 git clone https://github.com/zengxs…

LabVIEW在电机自动化生产线中的实时数据采集与生产过程监控

在电机自动化生产线中&#xff0c;实时数据采集与生产过程监控是确保生产效率和产品质量的重要环节。LabVIEW作为一种强大的图形化编程平台&#xff0c;可以有效实现数据采集、实时监控和自动化控制。详细探讨如何利用LabVIEW实现这一目标&#xff0c;包括硬件选择、软件架构设…

python算法和数据结构刷题[1]:数组、矩阵、字符串

一画图二伪代码三写代码 LeetCode必刷100题&#xff1a;一份来自面试官的算法地图&#xff08;题解持续更新中&#xff09;-CSDN博客 算法通关手册&#xff08;LeetCode&#xff09; | 算法通关手册&#xff08;LeetCode&#xff09; (itcharge.cn) 面试经典 150 题 - 学习计…

【PyTorch】7.自动微分模块:开启神经网络 “进化之门” 的魔法钥匙

目录 1. 梯度基本计算 2. 控制梯度计算 3. 梯度计算注意 4. 小节 个人主页&#xff1a;Icomi 专栏地址&#xff1a;PyTorch入门 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活…

C++基础day1

前言&#xff1a;谢谢阿秀&#xff0c;指路阿秀的学习笔记 一、基础语法 1.构造和析构: 类的构造函数是一种特殊的函数&#xff0c;在创建一个新的对象时调用。类的析构函数也是一种特殊的函数&#xff0c;在删除所创建的对象时调用。 构造顺序&#xff1a;父类->子类 析…