JS事件、对象基础篇

事件对象 event

  • 事件对象兼容处理

  • 事件流

事件冒泡
事件冒泡指具体元素接受事件,然后逐级向上传播事件
阻止事件冒泡 event.stopPropagation()

  • 案例: 下拉菜单

鼠标事件

  • 鼠标移动 onmousemove

  • 获取坐标

event.clientX 和 event.clientY是鼠标的可视区坐标
通常情况需要加上滚动距离

  • 案例1: 随着鼠标移动的物体
  • 案例2: 随着鼠标移动的多个物体

键盘事件

  • 键盘按下 obj.onkeydown

  • 键盘抬起 obj.onkeyup

  • 键盘代码 event.keyCode

  • 辅助键 event.ctrlKey event.shiftKey event.altKey

  • 案例1:左右键移动物体

  • 案例2:ctrl+回车提交

默认行为

默认行为是浏览器的自带行为

  • document.oncontextmenu 右键菜单

  • 阻止默认行为

  • 方法一 return false
  • 方法二 event.preventDefault()
  • 案例1:右键菜单
  • 案例2:只能输入数字的输入框

拖拽

原理:鼠标和物体的距离始终不变

obj.onmousedown
obj.onmouseup

  • 基础拖拽
  • 限制在浏览器中
  • 限制在父容器中
  • 磁性吸附
  • 带框的拖拽
  • 自定义滚动条(控制大小,控制透明度,控制文字)

事件

  • 事件是用户或者浏览器执行的某中动作,如click/mouseover

  • 事件处理程序是响应事件的函数,事件处理程序以on开头,如onclick/onmouseover

  • 事件绑定

obj.addEventListener(事件名,函数,false)
事件名没有’on’

  • 事件移除

obj.removeEventListener(事件名,函数,false)
移除事件监听只能是移除有函数名的,不能移除匿名函数的### 对象的基本概念

  • 什么是对象

对象就是一个可以提供特定功能的黑盒子,使用者不用关心功能的具体实现,只要知道怎么用就可以了

举例:电视就是一个对象,通过遥控器或者电视面板上的按钮操作电视

  • 什么是面向对象的程序设计

开发具有特定功能的黑盒子

  • 对象学什么
  • 使用对象 如:Date/Array/Math…
  • 开发自己的对象
  • 对象的特点
  • 封装 把具体的功能实现包起来,对外不公开
  • 抽象 根据具体的业务需求把需要的属性和方法抽取出来
  • 继承 子类具有父类的方法和属性,然后子类再开发自己特有的方法和属性
  • 多态 把子类赋给父类,赋值后的父类具有子类的特性
  • 对象的组成
  • 属性(变量)
  • 方法(函数)

创建对象

  • 字面量创建
  • 单体对象,适合整个系统只有一个对象的场景
  • 对象属性的特征:无序唯一
  • 对象属性特征的应用,去除重复数组
  • 把数组里面的值转换为对象的属性,由于对象的属性不能重复,所以此时对象的属性就把重复的值过滤掉
  • 把对象的属性转换为数组的值
  • js对象和json的区别
  • json是一种数据传输格式,js对象是类的实例,不能直接传输
  • json的键必须添加双引号,值不能是函数,js对象键不用加双引号,值可以是任意类型,如果js对象的属性不是一个合法的变量名时需要加双引号
  • json可以通过JSON.parse(jsonstr)转换为js对象,js对象可以用JSON.stringify(jsobj)转换为json
  • 构造函数创建
  • 用系统自带的对象创建对象
  • 缺点:会有把系统自带的方法和属性覆盖掉的风险
  • 用Object对象来创建对象
  • Object是所有对象的父类
  • 创建的对象方法和属性不能共用
  • 用工厂模式的函数创建对象
  • 不能用new来创建对象
  • 方法不能被实例共享,每个对象实例都生成一个相同的方法
  • 用new关键字创建对象 - 构造函数
  • new 的作用,函数会在一开始创建一个对象,并且这个对象就是this,最后会把这个this对象返回出去
  • 直接用new后可以把用工厂模式函数中创建对象和返回对象省略,但是方法还是不能被实例共享
  • 用new后,把工厂模式函数可以看做是类,类名一般首字母大写
  • 构造函数方法共享-将构造函数里面的方法指向全局函数
  • 缺点1.全局函数会在其他地方调用,这时会有风险
  • 缺点2.如果方法太多,就需要创建大量的全局函数
  • 缺点3.违背面向对象的封装特性
  • 构造原型模式
  • 原型 prototype 是存在于构造函数上的一个对象,所有的实例对象都可以访问原型对象
  • 可以在原型对象prototype添加共用的属性或者方法
  • 变化的属性和方法写在构造器中
  • 动态原型模式
  • 可以把原型对象prototype上的定义写在构造函数中,定义之前需要唯一执行判断

内存分析

面向对象案例:

  • 选项卡
  • 拖拽
  • 轮播图
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eugene.Tom.Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值