一、拖拽事件
一个元素:在拖动目标上触发事件 (源元素)
- ondrag 元素正在拖动时触发
- ondragstart 用户开始拖动元素时触发
- ondragend 用户完成元素拖动后触发
两个元素:释放目标时触发的事件:
ondragenter 当被鼠标拖动的对象进入其容器范围内时触发此事件
ondragover 当某被拖动的对象在另一对象容器范围内拖动时触发此事件
ondragleave 当被鼠标拖动的对象离开其容器范围内时触发此事件
ondrop 在一个拖动过程中,释放鼠标键时触发此事件
ondrop有一个小bug,如果想使用该事件必须阻止ondragover事件的默认行为
e.dataTransfer 可以跨元素事件
设置数据:e.dataTransfer.setData(key, value)
获得数据:e.dataTransfer.getData(key)
好处:不会产生全局变量
二、音频(audio)和视频(video)
方法:
play(): 播放
pause():暂停
属性:
volume:(音量) 0~1
muted:(是否静音) 值是布尔类型
duration:(总播放时长)
currentTime:(当前的播放时间)

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <style> 9 * { 10 margin: 0; 11 padding: 0; 12 } 13 #box { 14 width: 400px; 15 height: 60px; 16 background-color: red; 17 position: relative; 18 } 19 #blue { 20 position: absolute; 21 width: 350px; 22 height: 6px; 23 background-color: blue; 24 top: 50%; 25 margin-top: -3px; 26 left: 50%; 27 margin-left: -175px; 28 } 29 #orange { 30 position: absolute; 31 height: 6px; 32 background-color: orange; 33 top: 50%; 34 margin-top: -3px; 35 left: 50%; 36 margin-left: -175px; 37 } 38 #btn { 39 width: 6px; 40 left:25px; 41 height: 30px; 42 background-color: orange; 43 position: absolute; 44 top: 50%; 45 margin-top: -15px; 46 } 47 </style> 48 </head> 49 <body> 50 <video width="400" src="mp/1.mp4" controls></video> 51 <div id="box"> 52 <div id="blue"></div> 53 <div id="orange"></div> 54 <div id="btn"></div> 55 </div> 56 <button id="play">播放</button> 57 <button id="pause">暂停</button> 58 <button id="add">音量+</button> 59 <button id="reduce">音量-</button> 60 <button id="muted">静音</button> 61 <script> 62 // 封装一个函数 63 function $(selector) { 64 return document.querySelector(selector); 65 } 66 // 绑定事件 67 // 播放 68 $('#play').onclick = function() { 69 $('video').play(); 70 } 71 72 // 暂停 73 $('#pause').onclick = function() { 74 $('video').pause(); 75 } 76 77 // 音量+ 78 $('#add').onclick = function() { 79 // console.log($('audio').volume); 80 81 $('video').volume = $('video').volume <= 0.9 ? $('video').volume + 0.1 : 1; 82 } 83 84 // 音量- 85 $('#reduce').onclick = function() { 86 $('video').volume = $('video').volume > 0.1 ? $('video').volume - 0.1 : 0; 87 } 88 89 // 静音 90 $('#muted').onclick = function() { 91 // console.log($('audio').muted); 92 this.innerHTML = this.innerHTML === '静音' ? '恢复' : '静音'; 93 $('video').muted = !$('video').muted; 94 } 95 96 // 给btn绑定鼠标按下事件 97 $('#btn').onmousedown = function(e) { 98 // 获得一个坐标 99 var ox = e.clientX; 100 // 获得当前元素的left值 101 var ol = $('#btn').offsetLeft; 102 // 绑定鼠标移动事件 103 document.onmousemove = function(e) { 104 console.log(e.clientX); 105 // 获得移动的差值 106 var cx = e.clientX - ox; 107 // 获得新的left值 108 var nl = ol + cx; 109 // 边界判断 110 nl = nl > 375 ? 375 : nl; 111 nl = nl < 25 ? 25 : nl; 112 // 设置btn的left值 113 $('#btn').style.left = nl + 'px'; 114 // console.log(nl); 115 // 改变orange的宽度 116 $('#orange').style.width = nl - 25 + 'px'; 117 // 设置当前播放的位置 118 $('video').currentTime = (nl - 25) / 350 * $('video').duration; 119 120 } 121 } 122 123 // 鼠标抬起事件 124 document.onmouseup = function() { 125 // 取消鼠标移动事件 126 document.onmousemove = null; 127 } 128 129 130 </script> 131 </body> 132 </html>
三、Canvas(html5 提供的一个新的功能,html中只是一个标签,提供画布。真正操作canvas需要使用js)
标签自带的属性:width:宽度 height:高度
<canvas id="myCanvas" width="600" height="400"></canvas>
获取画笔: canvas.getContext(‘2d’);
baginPath() 开启路径
closePath()关闭路径
fill:填充颜色
fillStyle:设置填充颜色
坐标系(2D):x轴和y轴:默认情况下,canvas的坐标系和网页的坐标系是一样的,默认的坐标系原点为canvas画布的左上角的点
1.1 画弧(画圆)
方法:
arc(x,y,r,start,end,boll) ;
x:圆心的x坐标
y:圆心的y坐标
r:圆的半径
start:开始的角度位置,默认为0 水平向右
deg:结束角度的角度,如果绘制圆使用 Math.PI * 2 以π的方式进行计算
bool:表示是否逆时针
1.2 绘制坐标轴
画线:lineTo
移动到某个位置:moveTo
描边:stroke
设置描边色:strokeStyle
设置字体属性:font
写字:fillText

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <style> 9 * { 10 margin: 0; 11 padding: 0; 12 } 13 canvas { 14 border: 1px solid red; 15 display: block; 16 margin: 0 auto; 17 } 18 </style> 19 </head> 20 <body> 21 <canvas id="canvas" width="600" height="400"></canvas> 22 <script> 23 // 获得元素对象 24 var canvas = document.getElementById('canvas'); 25 26 // 获得画笔对象 27 var ctx = canvas.getContext('2d'); 28 // 设置描边色 29 ctx.strokeStyle = '#808080'; 30 31 // // 开启路径 32 // ctx.beginPath(); 33 // // 移动到0,0 34 // /* 35 // moveTo(x, y) 36 // x:要移动到的坐标的x值 37 // y:要移动到的坐标的y值 38 // */ 39 // ctx.moveTo(0, 0); 40 // // 画线 41 // /* 42 // lineTo(x, y) 43 // x:要画到的坐标的x值 44 // y:要画到的坐标的y值 45 // */ 46 // ctx.lineTo(600, 400); 47 // // 设置描边色 48 // ctx.strokeStyle = 'green'; 49 // // 描边 50 // ctx.stroke(); 51 52 // // 关闭路径 53 // ctx.closePath(); 54 // /* 55 // font:设置字体的属性 56 // */ 57 // ctx.font = '30px 宋体'; 58 // /* 59 // fillText(content, x, y) 60 // content:要写的字 61 // x:第一个字左下角的x坐标 62 // y:第一个字左下角的y坐标 63 // */ 64 // ctx.fillText('我爱你', 0, 30); 65 66 // 画x轴 67 line(5, 5, 590, 5); 68 line(580, 0, 590, 5); 69 line(580, 10, 590, 5); 70 ctx.fillText('X轴', 570, 20); 71 // 画y轴 72 line(5, 5, 5, 390); 73 line(0, 380, 5, 390); 74 line(10, 380, 5, 390); 75 ctx.fillText('Y轴', 10, 390); 76 77 78 function line(sx, sy, ex, ey) { 79 // 开启路径 80 ctx.beginPath(); 81 // 移动到某点 82 ctx.moveTo(sx, sy); 83 // 画线 84 ctx.lineTo(ex, ey); 85 // 描边 86 ctx.stroke(); 87 // 关闭路径 88 ctx.closePath(); 89 } 90 </script> 91 </body> 92 </html>
1.3绘制矩形
描边矩形: strokeRect(sx, sy, width, height)
填充矩形:fillRect(sx, sy, width, height)
绘制矩形需要几个点: 两个点 开始的顶点, 结束时对角线的点
sx;开始点的x坐标
sy:开始点的y坐标
width:矩形的宽度
height:矩形的高度

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <style> 9 * { 10 margin: 0; 11 padding: 0; 12 } 13 canvas { 14 display: block; 15 border: 1px solid red; 16 margin: 0 auto; 17 } 18 </style> 19 </head> 20 <body> 21 <canvas width="700" height="400"></canvas> 22 <script> 23 // 获得元素对象 24 var canvas = document.querySelector('canvas'); 25 26 // 获得画笔对象 27 var ctx = canvas.getContext('2d'); 28 // 绘制描边矩形 29 ctx.strokeRect(0, 0, 100, 100); 30 // 绘制填充矩形 31 ctx.fillRect(100, 100, 100, 100); 32 ctx.strokeRect(200, 200, 100, 100); 33 ctx.fillRect(300, 300, 100, 100); 34 ctx.strokeRect(400, 200, 100, 100); 35 ctx.fillRect(500, 100, 100, 100); 36 ctx.strokeRect(600, 0, 100, 100); 37 // 清除矩形 38 // ctx.clearRect(0, 0, canvas.width, canvas.height); 39 </script> 40 </body> 41 </html>