6.JS基础(三)

简单事件
案例1:鼠标移动时,在input文本框中显示鼠标位置(坐标)
onmousemove:鼠标移动时被触发
document.οnmοusemοve=function(){函数体(移动后要进行的事情)}
事件对象(function的形参):当事件的响应函数被触发时,浏览器每次都会将一个事件对象作为实参传入响应函数(function(){},又叫回调函数)
document.οnmοusemοve=function(形参(接收参数时要设置)){函数体(移动后要进行的事情)}
这里执行的鼠标移动后每次的move位置参数都会封装到形参里,这里的事件形参有很多内置属性
document.οnmοusemοve=function(x){
var a=x.clientX;
var b=x.clientY;
input.value=”x:“ + a + ”;y:“ + b;(在文本框显示坐标)
}

案例2:鼠标移动让盒子跟随鼠标走
var box=document.getElementById(”box“)
(box)document.οnmοusemοve=function(x){(移动对象不为document,而是document的div,这样鼠标脱离盒子后就不会跟着移动了,所以绑定document最好)
var a=x.clienX;
var b=x.clientY;
box.style.left=a+”px“;
box.style.top=b+”px“;
}
var a=x.clienX; var a=x.clien.pageX;
var b=x.clientY;(用于获取鼠标在当前的可见窗口坐标) var b=x.client.pageY(用于获取鼠标相对当前页面的坐标)

案例3:
1、当鼠标在被拖拽元素上按下时,开始拖拽
onmousedown
2、当鼠标移动时被拖拽元素跟鼠标一起移动
onmousemove
3、当鼠标松开时,被拖拽元素固定到当前位置
onmouseup
然后放到案例2中onmousedown把onmousemove嵌套起来,
然后松开时,元素固定的函数体为document.οnmοusemοve=null,就是onmouseup嵌套document.οnmοusemοve=null
移动到其他盒子的位置松开,会被其他盒子覆盖
为了让结果有意义,鼠标松开的函数体里要加上取消松开命令document.οnmοuseup=null,跟着拖拽一起取消掉,属于一次性事件

优化:拖拽过程中让鼠标作为中心点,而不是在左上角
1、求出div偏移量
2、鼠标的X值—元素的left值
3、鼠标的Y值—元素的top值
4、在function中加入函数结构var c=x.clientX—box.offsetLeft
var d=x.clientY—box.offsetTop
然后再改box.style.left=a+”px“;变成box.style.left=a+”px“—c;
box.style.top=b+”px“ ; box.style.top=b+”px“—d;

案例4:鼠标滚轮事件(和浏览器有兼容问题)
设置当鼠标滚轮向下滚动时,box变长,向上滚动时,box就变短,滚动的事件对象(形参)中也有他的内置属性wheelDelta,
向上滚动会给一个正数回形参封装,所以可以应用到滚轮事件box改变长度
box.onmousewheel=function{
(>0证明他向上)if(x.wheelDelta>0){
box.style.height=box.clientHeight—10+”px“
}else{box.style.height=box.clientHeight+10+”px“
return false(取消默认行为)
}
}
当滚轮滚动时,如果浏览器带了轮动条,滚动时随浏览器进行滚动
这属于浏览器的默认行为,如果不希望发生,可以取消默认行为可以在函数体里加return false

在火狐中使用:语法为box.addEventListener(”DOMMOUSEScroll“,function(){},false)

案例5:键盘事件
对于键盘事件一般都会绑定给一些可以获取到焦点(如:光标闪动的那个文本框)的对象,或者document对象
按下键盘:onkeydown
松开键盘:onkeyup
键盘事件的事件对象的内置属性keyCode可以查看按下的键是哪个,不过反馈出来的是对应键的编码
设置按下哪个键反馈什么信息可以为document.οnkeydοwn=function(x){
if(x.keyCode67){
console.log(”xixixix“)
}
}
判断ctrl+c是否按下了,把上式if(x.keyCode
67)改为if(x.keyCode==67 && x.ctrlKey)
除了keycode之外,事件对象中还提供了几个内置属性:altKey ctrlKey shiftKey 可以判断alt ctrl shift 是否被按下
如果被按下则返回true,否则返回false

Bom对象(浏览器对象模型)
可以通过JS来操作浏览器
结构又包括为以下对象:
window:代表整个浏览器窗口,同时window也是网页中的全局对象,
window又包括以下的对象console.log(window.location),函数体中location=”https://cn.bing.com/?FORM=Z9FD1。。。。。“可以执行超链接
Navigator:代表浏览器信息,可以通过这个对象识别不同的浏览器
Location:地址,代表浏览器的地址栏信息,或者操作浏览器跳转页面
History:代表浏览器的历史记录,由于涉及隐私,该对象不能获取到具体的历史记录,只能操作浏览器向前向后
console.log(window)查看window对象
Bom对象都是作为window对象的属性来保存的,可以通过window对象来使用,也可以直接使用
console.log(navigator.userAgent)userAgent就是一个字符串,这个字符串中包含有用来描述浏览器信息的内容,
不同的浏览器会有不同的userAgent,所以可以通过这个属性来判断浏览器的信息
Location有对应的函数:刷新函数,location.reload()
History:alert(history.length)其中的length可以获取当前访问到的链接数量(历史记录链接数加上当前链接的一个总数量)
back()回到上一个页面
forward()跳转到下一个页面
go()可以跳转到指定页面,需要传递一个整数为参数,传1,向前跳一个页面,2为向前跳两个,-1和-2就是相反
window.setInterval()定时调用,可以将一个函数每隔一段时间执行一次,
参数为回调函数(该函数会每隔一段时间被调用一次)+数值(每次调用间隔的时间,单位是毫秒)
var h=document.get。。。。。。。。(”“)
var num=1
var timer=window.setInterval(function(){h.innerHTML=num++(–时变成倒计时);},1000)
返回值:返回数字,代表定时器的标识
清除定时器:需要传入一个定时器的标识作为参数,这样就可以关闭对应的定时器,
(新值不能等于结果要大于结果,否则每次递增的结果如果不能达到等于定时器要求会超出,无法清除定时器)
可以给函数体加入if(num==10){window.clearInterval(timer)}
定时器的速度在多次触发事件后,其速度会叠加,想不叠加的话要

案例6:点击按钮后div向右移动
btn.οnclick=function(){box.style.left=200+”px“}
进阶:点击后定时的间隔性的移动
btn.οnclick=function(){var timer=setInterval(function(){
var oldValue=box.offsetLeft;
box.style.left=oldValue+”10px“;
},1000)
}(该方法局限性在于位置定死了)

为了不定死位置可以用getstyle函数来获取持续变化的值
用来获取某个元素的样式
function getstyle(使用这个内置函数来获取样式)(obj,name){
var caaobj =getComputedStyle(使用该方法可以获取所有样式)(obj,null);
return caaobj【name】(return加属性名要加中括号,否则默认为属性值)
}
var left = getstyle(使用并进行赋值)(box,”left“)
console.log(left)
这样可以应用到案例6中去
btn.οnclick=function(){var timer=setInterval(function(){
var oldValue= getstyle(box,”left“)(这个getstyle函数得到的是一个带px的值,
var ov=window.parseInt(oldValue) 所以要进行加减的话还要用到parseInt)
var bibi=ov+10;
box.style.left=bibi+”px“
},1000)
}为了当元素移动到800px时,清除定时器停止移动,在函数体中可以再加上if(newvalue==800){
clearInterval(timer)
}

inner+(text获取的是文本 HTML 获取文本+标签)
setInterval(time2,1000);每次执行给定的时间系统new Date时,会每过1秒刷新显示系统时间

扫描二维码关注公众号,回复: 12506441 查看本文章

猜你喜欢

转载自blog.csdn.net/qwe863226687/article/details/114015941
今日推荐