写代码需要思路
定义一个变量来存状态排他思想(去掉其他样式)定义变量,循环判断里面条件成立把for循环的i值赋值给自定义属性值,以便后面再获取自定义属性的值,然后让当前的样式发生变化购物车里面的事件委托形式表格中使用事件委托来实现功能把元素的位置以对象的形式存在数组中,后面再用位置来解析数组集合定时器清除时,定时器的名字需要定义一个特定的值面向对象中this的使用:声明一个变量存放
定义一个变量来存状态
<!DOCTYPE html
>
<html lang
="en">
<head
>
<meta charset
="UTF-8">
<meta name
="viewport" content
="width=device-width, initial-scale=1.0">
<meta http
-equiv
="X-UA-Compatible" content
="ie=edge">
<title
>Document
</title
>
</head
>
<body
>
<button id
="btn">开关灯
</button
>
<script
>
var btn
= document
.getElementById('btn');
var flag
= 0;
btn
.onclick = function () {
if (flag
== 0) {
document
.body
.style
.backgroundColor
= 'black';
flag
= 1;
} else {
document
.body
.style
.backgroundColor
= '#fff';
flag
= 0;
}
}
</script
>
</body
>
</html
>
排他思想(去掉其他样式)
<!DOCTYPE html
>
<html lang
="en">
<head
>
<meta charset
="UTF-8">
<meta name
="viewport" content
="width=device-width, initial-scale=1.0">
<meta http
-equiv
="X-UA-Compatible" content
="ie=edge">
<title
>Document
</title
>
<style
>
button
{
outline
: 0;
border
: 0;
}
</style
>
</head
>
<body
>
<button
>按钮
1</button
>
<button
>按钮
2</button
>
<button
>按钮
3</button
>
<button
>按钮
4</button
>
<button
>按钮
5</button
>
<script
>
var btns
= document
.getElementsByTagName('button');
for (var i
= 0; i
< btns
.length
; i
++) {
btns
[i
].onclick = function () {
for (var i
= 0; i
< btns
.length
; i
++) {
btns
[i
].style
.backgroundColor
= '';
}
this.style
.backgroundColor
= 'skyblue';
}
}
</script
>
</body
>
</html
>
定义变量,循环判断里面条件成立
<!DOCTYPE html
>
<html
>
<head lang
="en">
<meta charset
="UTF-8">
<title
></title
>
<style
>
* {
padding
: 0;
margin
: 0;
}
.wrap
{
width
: 300px
;
margin
: 100px auto
0;
}
table
{
border
-collapse
: collapse
;
border
-spacing
: 0;
border
: 1px solid #c0c0c0
;
width
: 300px
;
}
th
,
td
{
border
: 1px solid #d0d0d0
;
color
: #
404060;
padding
: 10px
;
}
th
{
background
-color
: #
09c
;
font
: bold
16px
"微软雅黑";
color
: #fff
;
}
td
{
font
: 14px
"微软雅黑";
}
tbody tr
{
background
-color
: #f0f0f0
;
}
tbody tr
:hover
{
cursor
: pointer
;
background
-color
: #fafafa
;
}
</style
>
</head
>
<body
>
<div
class="wrap">
<table
>
<thead
>
<tr
>
<th
>
<input type
="checkbox" id
="thAll" />
</th
>
<th
>商品
</th
>
<th
>价钱
</th
>
</tr
>
</thead
>
<tbody id
="tb">
<tr
>
<td
>
<input type
="checkbox" />
</td
>
<td
>iPhone18
</td
>
<td
>8000</td
>
</tr
>
<tr
>
<td
>
<input type
="checkbox" />
</td
>
<td
>iPad Pro
</td
>
<td
>5000</td
>
</tr
>
<tr
>
<td
>
<input type
="checkbox" />
</td
>
<td
>iPad Air
</td
>
<td
>3000</td
>
</tr
>
<tr
>
<td
>
<input type
="checkbox" />
</td
>
<td
>Apple Watch
</td
>
<td
>2000</td
>
</tr
>
</tbody
>
</table
>
</div
>
<script
>
var thAll
= document
.getElementById('thAll');
var tdIpts
= document
.getElementById('tb').getElementsByTagName('input');
thAll
.onclick = function () {
for (var i
= 0; i
< tdIpts
.length
; i
++) {
tdIpts
[i
].checked
= this.checked
;
}
}
for (var i
= 0; i
< tdIpts
.length
; i
++) {
tdIpts
[i
].onclick = function () {
var flag
= true;
for (var i
= 0; i
< tdIpts
.length
; i
++) {
if (!tdIpts
[i
].checked
) {
flag
= false;
break;
}
}
thAll
.checked
= flag
;
}
}
</script
>
</body
>
</html
>
把for循环的i值赋值给自定义属性值,以便后面再获取自定义属性的值,然后让当前的样式发生变化
<!DOCTYPE html
>
<html lang
="en">
<head
>
<meta charset
="UTF-8">
<meta name
="viewport" content
="width=device-width, initial-scale=1.0">
<meta http
-equiv
="X-UA-Compatible" content
="ie=edge">
<title
>Document
</title
>
<style
>
* {
margin
: 0;
padding
: 0;
box
-sizing
: border
-box
;
}
li
{
list
-style
-type
: none
;
}
.tab
{
width
: 978px
;
margin
: 100px auto
;
}
.tab_list
{
height
: 39px
;
border
: 1px solid #ccc
;
background
-color
: #f1f1f1
;
}
.tab_list li
{
float
: left
;
height
: 39px
;
line
-height
: 39px
;
padding
: 0 20px
;
text
-align
: center
;
cursor
: pointer
;
}
.tab_list
.current
{
background
-color
: #c81623
;
color
: #fff
;
}
.item_info
{
padding
: 20px
0 0 20px
;
}
.item
{
display
: none
;
width
: 978px
;
height
: 400px
;
border
: 1px solid #ccc
;
}
</style
>
</head
>
<body
>
<div
class="tab">
<div
class="tab_list">
<ul
>
<li
class="current">商品介绍
</li
>
<li
>规格与包装
</li
>
<li
>售后保障
</li
>
<li
>商品评价(
50000)
</li
>
<li
>手机社区
</li
>
</ul
>
</div
>
<div
class="tab_con">
<div
class="item" style
="display: block;">
商品介绍模块内容
</div
>
<div
class="item">
规格与包装模块内容
</div
>
<div
class="item">
售后保障模块内容
</div
>
<div
class="item">
商品评价(
50000)模块内容
</div
>
<div
class="item">
手机社区模块内容
</div
>
</div
>
</div
>
<script
>
var tab_list
= document
.querySelector('.tab_list');
var lis
= tab_list
.querySelectorAll('li');
var items
= document
.querySelectorAll('.item');
for (var i
= 0; i
< lis
.length
; i
++) {
lis
[i
].setAttribute('index', i
);
lis
[i
].onclick = function () {
for (var i
= 0; i
< lis
.length
; i
++) {
lis
[i
].className
= '';
}
this.className
= 'current';
var index
= this.getAttribute('index');
console
.log(index
);
for (var i
= 0; i
< items
.length
; i
++) {
items
[i
].style
.display
= 'none';
}
items
[index
].style
.display
= 'block';
}
}
</script
>
</body
>
</html
>
购物车里面的事件委托形式
包括switch case 的使用
let shopS
= document
.querySelector('.shopS');
let cartall
= document
.querySelector('.cartall');
let savetall
= document
.querySelector('.savetall');
render(lists
);
function render(goodLists
) {
shopS
.innerHTML
= goodLists
.map((item
) => {
let saveTotal
= item
.num
* (item
.oriPrice
- item
.nowPrice
);
return `
<tr class="shopList" idx="${item.id}">
<td class="imgTd">
<img class="shops" src="${item.img}" alt="" srcset="">
</td>
<td class="titleTd">
<h6>${item.title}</h6>
<span>ID:#${item.id}</span>
<span>Size:${item.size}</span>
</td>
<td class="Son2">
<span class="reduce">-</span>
<input type="text" disabled value="${item.num}" class="count">
<span class="add">+</span>
</td>
<td class="Son3">
<del class="oriPrice">${item.oriPrice} py6</del>
<b class="nowPrice">${item.nowPrice} py6</b>
</td>
<td class="Son4">
<span class="priceAll">${(item.nowPrice * item.num).toFixed(2)} py6</span>
<span class="saveAll">You save ${saveTotal.toFixed(2)} py6</span>
</td>
<td class="Son5">
<img class="del" src="../images/del.png" alt="">
</td>
</tr>`
}).join('')
let carTall
= goodLists
.reduce((pre
, cur
, index
) => {
return pre
+ cur
.nowPrice
* cur
.num
;
}, 0)
cartall
.firstElementChild
.innerHTML
= carTall
.toFixed(2) + ' py6.';
let saveTall
= goodLists
.reduce((pre
, cur
, index
) => {
return pre
+ cur
.num
* (cur
.oriPrice
- cur
.nowPrice
)
}, 0)
savetall
.innerHTML
= `Your Total Saving:${saveTall.toFixed(2)} py6.`;
}
let $tr
, $id
;
let shop
= document
.querySelector('.shop');
shop
.onclick = (e
) => {
switch (e
.target
.className
) {
case 'reduce':
$tr
= e
.target
.parentNode
.parentNode
;
$id
= $tr
.getAttribute('idx');
lists
.forEach(item
=> {
if (item
.id
== $id
&& item
.num
> 1) {
item
.num
-= 1;
render(lists
);
}
})
break
case 'add':
$tr
= e
.target
.parentNode
.parentNode
;
$id
= $tr
.getAttribute('idx');
lists
.forEach(item
=> {
if (item
.id
== $id
) {
item
.num
+= 1;
render(lists
);
}
})
break
case 'del':
let res
= confirm('你确定删除吗');
if (res
) {
$tr
= e
.target
.parentNode
.parentNode
;
$id
= $tr
.getAttribute('idx');
lists
.forEach((item
, index
, array
) => {
if (item
.id
== $id
) {
array
.splice(index
, 1)
render(lists
);
}
})
}
break
}
}
表格中使用事件委托来实现功能
<!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
>
table
{
width
: 100%;
border
: 1px solid #ccc
;
border
-collapse
: collapse
;
border
-spacing
: 0px
;
}
table td
{
border
: 1px solid #ccc
;
height
: 30px
;
}
</style
>
</head
>
<body
>
<div
class="box">
<h1
>的使用创建dom节点动态生成表格
</h1
>
<label
for="">行:
</label
>
<input type
="text" id
="row">
<label
for="">列:
</label
>
<input type
="text" id
="col">
<input type
="button" id
="btn" value
="生成">
<div id
="output">
<!-- <table
>
<tbody
>
<tr
>
<td
>浮动法
</td
>
</tr
>
</tbody
>
</table
> -->
</div
>
</div
>
<script
>
var output
= document
.querySelector('#output');
var btn
= document
.querySelector('#btn');
var row
= document
.querySelector('#row');
var col
= document
.querySelector('#col');
var table
= document
.createElement('table');
var tbody
= document
.createElement('tbody');
table
.appendChild(tbody
);
btn
.onclick = function () {
var _row
= row
.value
;
var _col
= col
.value
;
renderTable(_row
, _col
);
}
output
.onclick = function (e
) {
if (e
.target
.className
=== 'copy') {
var newTr
= e
.target
.parentNode
.parentNode
.cloneNode(true);
tbody
.appendChild(newTr
)
}
if (e
.target
.className
=== 'delete') {
e
.target
.parentNode
.parentNode
.remove();
}
}
function renderTable(_row
, _col
) {
for (var i
= 0; i
< _row
; i
++) {
var tr
= document
.createElement('tr');
for (var j
= 0; j
< _col
; j
++) {
var td
= document
.createElement('td');
td
.innerHTML
= '单元格' + i
+ j
;
tr
.appendChild(td
);
}
var _td
= document
.createElement('td');
var copyEle
= document
.createElement('button');
copyEle
.className
= 'copy';
copyEle
.innerHTML
= '复制';
var deleteEle
= document
.createElement('button');
deleteEle
.className
= 'delete';
deleteEle
.innerHTML
= '删除'
_td
.appendChild(copyEle
);
_td
.appendChild(deleteEle
);
tr
.appendChild(_td
)
tbody
.appendChild(tr
);
}
output
.appendChild(table
);
}
</script
>
</body
>
</html
>
把元素的位置以对象的形式存在数组中,后面再用位置来解析数组集合
<!DOCTYPE html
>
<html lang
="en">
<head
>
<meta charset
="UTF-8">
<meta name
="viewport" content
="width=device-width, initial-scale=1.0">
<meta http
-equiv
="X-UA-Compatible" content
="ie=edge">
<title
>Document
</title
>
<style
>
html
,
body
{
overflow
: hidden
;
}
body
,
div
,
h2
,
p
{
margin
: 0;
padding
: 0;
}
body
{
color
: #fff
;
background
: #
000;
font
: 12px
/2 Arial
;
}
p
{
padding
: 0 10px
;
margin
-top
: 10px
;
}
span
{
color
: #ff0
;
padding
-left
: 5px
;
}
#box
{
position
: absolute
;
width
: 300px
;
height
: 150px
;
background
: #
333;
border
: 2px solid #ccc
;
left
: 20px
;
top
: 20px
;
}
#box h2
{
height
: 25px
;
line
-height
: 25px
;
cursor
: move
;
background
: #
222;
border
-bottom
: 2px solid #ccc
;
text
-align
: right
;
padding
: 0 10px
;
}
#box h2 a
{
color
: #fff
;
font
: 12px
/25px Arial
;
text
-decoration
: none
;
outline
: none
;
}
</style
>
</head
>
<body
>
<div id
="box">
<h2
><a href
="#">点击回放拖动轨迹
</a
></h2
>
<p
><strong
>Drag
:</strong
><span
>false</span
></p
>
<p
><strong
>offsetLeft
:</strong
><span
>0</span
></p
>
<p
><strong
>offsetTop
:</strong
><span
>0</span
></p
>
</div
>
<script
>
window
.onload = function () {
var box
= document
.getElementById('box');
var h2
= box
.children
[0];
var dragSpan
= box
.children
[1].children
[1];
var leftSpan
= box
.children
[2].children
[1];
var topSpan
= box
.children
[3].children
[1];
var links
= h2
.children
[0];
var arr
= [];
h2
.onmousedown = function (e
) {
var ox
= e
.offsetX
;
var oy
= e
.offsetY
;
dragSpan
.innerHTML
= 'true';
document
.onmousemove = function (evt
) {
box
.style
.left
= evt
.clientX
- ox
+ 'px'
box
.style
.top
= evt
.clientY
- oy
+ 'px';
leftSpan
.innerHTML
= evt
.clientX
- ox
;
topSpan
.innerHTML
= evt
.clientY
- oy
;
var obj
= {};
obj
.x
= evt
.clientX
- ox
;
obj
.y
= evt
.clientY
- oy
;
arr
.push(obj
);
}
}
document
.onmouseup = function () {
document
.onmousemove
= null;
dragSpan
.innerHTML
= 'false'
}
links
.onclick = function () {
clearInterval(links
.timer
);
var i
= 0;
links
.timer
= setInterval(function () {
box
.style
.left
= arr
[i
].x
+ 'px';
box
.style
.top
= arr
[i
].y
+ 'px';
leftSpan
.innerHTML
= arr
[i
].x
;
topSpan
.innerHTML
= arr
[i
].y
;
i
++;
if (i
=== arr
.length
) {
clearInterval(links
.timer
);
arr
= [];
}
}, 10)
}
}
</script
>
</body
>
</html
>
定时器清除时,定时器的名字需要定义一个特定的值
主要是注意那个清除定时器的那个定时器的名字
function move(ele
, obj
, callback
) {
let timerLen
= 0;
for (let key
in obj
) {
timerLen
++
let speed
;
clearInterval(ele
[key
])
ele
[key
] = setInterval(() => {
let style
;
if (key
=== 'opacity') {
style
= getStyle(ele
, key
) * 100;
} else {
style
= parseInt(getStyle(ele
, key
));
}
speed
= (obj
[key
] - style
) / 5;
speed
= speed
> 0 ? Math
.ceil(speed
) : Math
.floor(speed
);
style
= style
+ speed
;
if (key
=== 'opacity') {
ele
.style
[key
] = style
/ 100;
} else {
ele
.style
[key
] = style
+ 'px';
}
if (style
=== obj
[key
]) {
clearInterval(ele
[key
]);
timerLen
--;
if (timerLen
=== 0) {
callback
&& callback();
}
}
}, 30)
}
}
面向对象中this的使用:声明一个变量存放
那下面以一个简单案例 选项卡来说:
<!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
>
<div
class="container">
<div
class="control">
<button
>选项
1</button
>
<button
>选项
2</button
>
<button
>选项
3</button
>
</div
>
<div
class="content">
<div
class="box">内容
1</div
>
<div
class="box">内容
2</div
>
<div
class="box">内容
3</div
>
</div
>
</div
>
<script
>
function Table(btns_sele
, contents
) {
this.btns
= document
.querySelectorAll(btns_sele
)
this.cont
= document
.querySelectorAll(contents
)
this.index
= 0
this.changeTable()
this.bindEvent()
}
Table
.prototype
.bindEvent = function () {
var self
= this
for (let i
= 0; i
< self
.btns
.length
; i
++) {
self
.btns
[i
].onclick = function () {
self
.index
= i
self
.changeTable()
}
}
}
Table
.prototype
.changeTable = function () {
var self
= this
for (let i
= 0; i
< self
.cont
.length
; i
++) {
self
.cont
[i
].style
.display
= "none"
}
self
.cont
[self
.index
].style
.display
= "block"
}
var table
= new Table(".control button", ".box")
</script
>
</body
>
</html
>
转载请注明原文地址:https://ipadbbs.8miu.com/read-61866.html