1.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
img {
position: absolute;
top: 50%;
left: 50%;
margin-left: -250px;
margin-top: -225px;
}
</style>
</head>
<body>
<img src="./images/login.png" alt="" draggable="false" />
<script>
/*
目标: 鼠标拖动图片
思路:
1. 当没有按下鼠标的时候, 鼠标移动 图片不动
2. 当我们的图片上按下鼠标的时候, 然后移动鼠标 然后图片跟着动
3. 鼠标抬起的时候(松开左键, 图片就停在对应的位置 在移动鼠标 图不动)
步骤:
1. 给img加一个属性: draggable = 'false'
决定元素是否能够响应 H5新属性
2. 找对象 获取元素
3. 注册事件
鼠标按下事件
4. 设置一个标记为true能动
5. 鼠标移动的
5.1 判断图片是否处于能动的状态
5.2 能动 根据鼠标位置算出img应该出现的位置
6. 鼠标抬起松开的时候
设置标记 为false不能动
*/
// 获取元素
var img = document.querySelector('img');
// 声明一个变量 作为标记 是否移动
var canMove = false;
var tempX, tempY;
// 注册事件
// 给图片注册鼠标按下事件mosedown
img.onmousedown = function (e) {
canMove = true;
console.log(e.offsetX, e.offsetY);
// 记录点下的时候鼠标在图片上的位置
tempX = e.offsetX;
tempY = e.offsetY;
}
// 鼠标移动事件 mousemove
img.onmousemove = function (e) {
// 判断能够移动
if (canMove) {
// 因为 margin会移动元素 我们不希望margin影响图片的位置 把margin去掉
// img.style.marginTop = 0;
// img.style.marginLeft = 0;
var x = e.pageX - tempX + 250;
var y = e.pageY - tempY + 225;
img.style.left = x + 'px';
img.style.top = y + 'px';
}
}
// 鼠标抬起事件 mouseup
img.onmouseup = function () {
canMove = false;
}
</script>
</body>
</html>
2.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>注册事件</title>
</head>
<body>
<input type="button" value="按钮" id="btn" />
</body>
<script>
/*
js中的注册事件
on
事件源.on 事件类型=事件处理程序
on的事件注册有个缺点:一个元素同类型的事情 只能注册一次
addEventListener
作用:注册事件
用法:
element.addEventListener(event,fun)
element 注册事件的对象
event 事件类型
fun 事件处理程序
优点:可以重复注册支持新的事件
缺点:ie8以及以下不支持
attachEvent() ie5 开始到ie10 都可以用
element.addEventListener(on+事件类型,事件处理程序)
*/
var btn = document.getElementById('btn');
// 点击事件的值会被后面的覆盖
btn.onclick = function () {
console.log(1);
}
btn.onclick = function () {
console.log(2);
}
// 演示 addEventListener
btn.addEventListener('click', function () {
console.log(1);
});
btn.addEventListener('click', function () {
console.log(3);
});
//演示atttacheEvent()
btn.addEventListener("click", function () {
console.log(1);
});
btn.addEventListener("click", function () {
console.log(2);
});
// 演示 attachEvent()//谷歌会报错,ie专用
// btn.attachEvent("onclick", function () {
// console.log(3);
// });
// 将来如果自己需要实现多个浏览器 注册事件的兼容性问题
// 判断当前的浏览器是否支持我想要的使用的注册事件方法
console.log(btn.addEventListener);
console.log(btn.attachEvent);
if (btn.addEventListener !== undefined) {
btn.addEventListener('click', function () {
console.log('我是谷歌浏览器专用代码');
});
} else if (btn.attachEvent !== undefined) {
btn.attachEvent('onclick', function () {
console.log('我是ie专用代码');
});
} else {
btn.onclick = function () {
console.log('请更换你的浏览器');
}
}
</script>
</html>
3.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.yeye {
width: 400px;
height: 400px;
background-color: lawngreen;
}
.baba {
width: 300px;
height: 300px;
background-color: tomato;
}
.erzi {
width: 200px;
height: 200px;
background-color: cyan;
}
.sunzi {
width: 100px;
height: 100px;
background-color: gold;
margin-left: 600px;
}
</style>
</head>
<body>
<div class="yeye">
<div class="baba">
<div class="erzi">
<div class="sunzi"></div>
</div>
</div>
</div>
</body>
<script>
/*
事件注册:====事件监听==============
事件绑定
element.addEventListener (event,function,useCapture)
useCapture 决定函数在哪个阶段执行
捕获:从根元素(document)开始,一层一层找到真正的触发事件的元素目标
找到真正触发事件的的元素
冒泡:从事件源,一层一层向外传播的过程
一旦事件传播到这个元素的身上,如果有注册对应的事件,就会调用对应的事件处理程序
*/
// 获取元素
var yeye = document.querySelector('.yeye');
var baba = document.querySelector('.baba');
var erzi = document.querySelector('.erzi');
var sunzi = document.querySelector('.sunzi');
// 演示事件的捕获(从大到小)
// 点爸爸的时候是点不到儿子的
// yeye.addEventListener(
// 'click',
// function () {
// console.log('我是爷爷');
// },
// true
// );
// baba.addEventListener(
// 'click',
// function () {
// console.log('我是爸爸');
// },
// true
// );
// erzi.addEventListener(
// 'click',
// function () {
// console.log('我是儿子');
// },
// true
// );
// sunzi.addEventListener(
// 'click',
// function () {
// console.log('我是孙子');
// },
// true
// );
// 演示一下冒泡(从小到大)
// 点爸爸的时候是点不到儿子的
yeye.addEventListener(
'click',
function(){
console.log('我是你爷爷');
},
false
);
baba.addEventListener(
'click',
function(){
console.log('我是你爸爸');
},
false
);
erzi.addEventListener(
'click',
function(){
console.log('我是你儿子');
},
false
);
sunzi.addEventListener(
'click',
function(){
console.log('我是你孙子');
},
false
);
</script>
</html>
4.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
.baba {
width: 100%;
height: 200px;
background-color: tomato;
position: relative;
font-size: 100px;
}
.erzi {
width: 40px;
height: 40px;
background-color: lawngreen;
position: absolute;
top: 0;
right: 0;
text-align: center;
line-height: 40px;
font-size: 16px;
}
</style>
</head>
<body>
<div class="baba">
这是一个超大的广告图
<div class="erzi">X</div>
</div>
</body>
<script>
/*
有两个元素 是父子关系
父元素有点击事件 子元素也有点击事件
如果点击是子元素的点击事件,由于事件冒泡.也会触发父元素里面的事件处理程序
需要不让父元素里面的点击事件触发 ---阻止事件冒泡
阻止事件冒泡:
事件对象.stopPropagation()
*/
var baba = document.querySelector('.baba')
console.log(baba);
var erzi = document.querySelector('.erzi')
console.log(erzi);
baba.addEventListener('click',function(e){
console.log(e);
console.log(123);
// 跳转到4399
location.href = 'http://www.4699.com';
});
erzi.addEventListener('click',function(e){
console.log(e);
baba.parentNode.removeChild(baba);
// 事件对象.stopPropagation();
// 希望事件传播到哪,就在哪里写阻止事件冒泡
e.stopPropagation();
});
</script>
</html>
5.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
ul {
list-style: none;
min-height: 200px;
background-color: lawngreen;
}
li {
float: left;
width: 200px;
height: 60px;
border-radius: 5px;
background-color: tomato;
color: #fff;
margin-left: 10px;
margin-top: 10px;
}
</style>
</head>
<body>
<input type="button" value="生成一个新的li" id="btn" />
<ul></ul>
</body>
<script>
/* 目标:学会事件委托
作用: 解决动态生成的元素 事件处理问题
原理:
1.点击li的时候 事件会冒泡到ul上面
2.给ul注册事件
3.如果ul的事件处理程序被调用了
4.判断触发事件的真正元素是不是li 是li 就去执行删除li的代码
*/
// 动态生成li
var ul = document.querySelector("ul");
var btn = document.getElementById("btn");
var count = 0;
btn.onclick = function () {
count++;
var li = document.createElement("li");
li.innerText = "我是新来的,我要做大哥" + count;
ul.appendChild(li);
};
// 事件委托
// 1.先给已存在于页面中的一个前辈元素注册事件
// ++++++++++++++++++++++++++++++++总结:父元素捕获子元素用委托方式
// ++++++++++++++++++++++++++++++++总结:子元素控制父元素用冒泡
// li.addEventListener('click',function(e){
// ul.removeChild(e.target);
// e.stopPropagation();
// });
ul.addEventListener('click', function (e) {
console.log(e);
console.dir(e.target);
if (e.target.nodeName === 'LI') {
ul.removeChild(e.target);
}
});
</script>
</html>
6.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>大家来吐槽</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul {
list-style: none;
}
.main {
width: 800px;
margin: 0 auto;
}
textarea {
resize: none;
}
.opt {
padding: 10px;
}
.opt input:nth-child(1) {
width: 200px;
height: 40px;
border-radius: 4px;
border: 1px solid #ffa200;
outline: none;
padding: 4px;
}
.opt textarea {
border-radius: 4px;
outline: none;
margin-top: 10px;
margin-bottom: 10px;
width: 100%;
padding: 10px;
height: 100px;
border-color: #ffa200;
}
.opt input:nth-child(3) {
width: 100px;
height: 40px;
border-radius: 4px;
border: 0 none;
outline: none;
padding: 4px;
background-color: #ffa200;
color: #fff;
}
.coments {
padding: 10px;
}
li {
border: 1px dashed #ccc;
padding: 10px;
margin-bottom: 10px;
}
.comment-content {
margin: 10px 0;
text-indent: 2em;
border-bottom: 1px dashed #ccc;
line-height: 24px;
}
.date {
text-align: right;
padding-right: 10px;
}
.delete {
text-align: right;
line-height: 30px;
padding-right: 10px;
}
.del {
cursor: pointer;
color: #ccc;
}
</style>
</head>
<body>
<div class="main">
<div class="opt">
<div class="ta">
<input
type="text"
id="username"
placeholder="怎么称呼您"
autocomplete="false"
/>
<textarea class="coment" placeholder="尽情地吐槽吧"></textarea>
<input type="button" value="发表" />
</div>
<div class="button"></div>
</div>
<div class="coments">
<ul>
<!-- <li>
<div class="user">李狗蛋</div>
<div class="comment-content">今天的天气真好呀</div>
<div class="date">2020-01-01 08:10:10</div>
<div class="delete"><span class="del">删除</span></div>
</li> -->
</ul>
</div>
</div>
<script>
/*
处理数据 时间 从近到远排序
*/
// 动态生成评论
// 1.1生成一个数组
var comments = [
{
user: "王德发",
content: "那一年我背井离乡,从此村里的人再也没喝过一口水",
time: "2021-04-09 15:15:18",
},
{
user: "小甜甜",
content: "我班里的女神穷追猛打,最后终于把她打进了医院",
time: "2021-03-08 12:48:52",
},
];
//排序
comments.sort(function (a, b) {
var aDate = new Date(a.time);
var bDate = new Date(b.time);
return bDate - aDate;
});
// 1.2 遍历生成li
var str = "";
comments.forEach(function (e) {
str +=
"<li>" +
'<div class="user">' +
e.user +
"</div>" +
'<div class="comment-content">' +
e.content +
"</div>" +
'<div class="date">' +
e.time +
"</div>" +
'<div class="delete"><span class="del">删除</span></div>' +
"</li>";
});
//获取ul
var ul = document.querySelector(".coments ul");
ul.innerHTML = str;
// 2.1 获取相关的元素
//获取按钮
// var btn = document.querySelector(".ta input:nth-child(3)");
//获取按钮
var btn = document.querySelector(".ta input[type=button]");
//获取用户名
var username = document.getElementById("username");
//获取评论区内容
var coment = document.querySelector(".coment");
// console.log(coment);
//注册事件
btn.onclick = function () {
//获取用户名框的内容
var user = username.value;
//表单验证 要求限制让用户遵守规则 去掉两端空格
if (user.trim().length === 0) {
alert("用户名不能为空");
return;
}
//获取评论的内容
var content = coment.value;
if (content.trim().length === 0) {
alert("评论内容不能为空");
return;
}
// 获取当前的时间
var date = new Date();
date.setHours(date.getHours() + 8);
var time = date.toJSON();
time = time.replace("T", " ").substring(0, time.indexOf("."));
// 生成li 由于评论不能覆盖 不能使用innerHTML document.createElement
var li = document.createElement("li");
li.innerHTML =
'<div class="user">' +
user +
"</div>" +
'<div class="comment-content">' +
content +
"</div>" +
'<div class="date">' +
time +
"</div>" +
'<div class="delete"><span class="del">删除</span></div>';
//把这个li放到ul里 追加
// var first = document.querySelector(".coments ul li:nth-child(1)");
// console.log(first);
ul.insertBefore(li, ul.children[0]);
//清空内容
username.value = "";
coment.value = "";
//使用事件委托进行删除
ul.addEventListener("click", function (e) {
//判断的方式有很多 可以判断是不是span标签 也可以来判断类名是不是del
// contains()
console.dir(e.target);
console.log(e.target.classList);
if (e.target.classList.contains("del")) {
// 证明点击元素是满足条件的
// 删除li
if (confirm("你确定要删除吗?")) {
var zf = e.target.parentNode.parentNode;
var zzf = zf.parentNode;
zzf.removeChild(zf);
}
}
});
};
</script>
</body>
</html>
7.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="button" value="抽奖" id="btn" />
</body>
<script>
/*
事件解绑:
原来注册了事件 希望不再触发
解绑和注册时相反的过程
on 事件源.on事件类型=事件处理程序
解绑的时候
事件源.on事件类型= null;
addEventListener('事件类型',事件处理程序)
事件源.removeEventListener('类型',函数名)
attachEvent
事件源.detachEvent('on + 事件类型',函数名)
*/
// 抽奖--方法一
// var btn = document.getElementById('btn')
// btn.onclick = function () {
// alert('谢谢惠顾');
// btn.onclick = null;
// };
// 抽奖方法二
btn.addEventListener('click', function fn() {
alert('谢谢惠顾');
btn.removeEventListener('click', fn);
});
</script>
</html>
8.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="text" id="ipt" />
<textarea id="txt"></textarea>
<div>
却说那八戒跟着丈母,行入里面,一层层也不知多少房舍,磕磕撞撞,尽都是门槛绊脚。呆子道:“娘,慢些儿走。我这里边路生,你带我带儿。”那妇人道:“这都是仓房、库房、碾房各房,还不曾到那厨房边哩。”八戒道:“好大人家!”磕磕撞撞,转湾抹角,又走了半会,才是内堂房屋。那妇人道:“女婿,你师兄说今朝是天恩上吉日,就教你招进来了;却只是仓卒间,不曾请得个阴阳,拜堂撒帐,你可朝上拜八拜儿罢。”八戒道:“娘,娘说得是。你请上坐,等我也拜几拜,就当拜堂,就当谢亲,两当一儿,却不省事?”他丈母笑道:“也罢,也罢,果然是个省事干家的女婿。我坐着,你拜么。”
</div>
</body>
<script>
/*
srcElement和target一样的,是事件源 但是是在ie8里面的使用的
阻止浏览器默认行为 表单 超链接 鼠标右键
e.preventDefault
*/
var ipt = document.getElementById("ipt");
//聚焦focus 当鼠标光标进入的触发
ipt.onfocus = function (e) {
console.log("我被选中了");
// console.log(e);
};
// 失焦 当鼠标离开的时候 触发 blur
ipt.onblur = function (e) {
console.log('鼠标离开了');
console.log(e);
};
ipt.onclick = function (e) {
console.log('我被点击了');
console.log(e);
};
// 键盘事件 按下 keydown 抬起 keyup
// ipt.onkeydown = function () {
// console.log(123);
// };
// 给document注册键盘事件
document.onkeydown = function (e) {
if (e.keyCode == 67 && e.ctrlKey) {
console.log('点击了ctrl+c');
e.preventDefault();
}
};
</script>
</html>