JavaScript 特效

特效扩展

银行卡自动截断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<h1>请输入银行卡:</h1>
<hr>

<input type="text" id="bankCard" maxlength="23">

<script>
var input = document.getElementById('bankCard');

if (document.all) {
input.onpropertychange = ckInput;
} else {
input.oninput = ckInput;
}


function ckInput(){
// 将输入范围限定在数字范围之内
// A:
/*input.value = input.value
.replace(/\D/g, '')
.replace(/(\d{4})/g, '$1-')
.replace(/-$/g, '');*/
// B:
input.value = input.value
.replace(/\D/g, '')
.replace(/(\d{4})(?=\d)/g, '$1-')
}

/*
(?:) 忽略子模式的匹配
(?=) 正向预查/先行断言
匹配过程中,需要用到这个子模式的条件
但是,获取匹配结果时,忽略该子模式的条件
*/

</script>

轮播图(Banner)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
<head>
<meta charset="UTF-8">
<title>轮播图</title>
<style>
*{
list-style:none;
}
#box{
width: 400px;
height: 300px;
margin: 0 auto;
border: 1px solid #000;
}
#container{
position:relative;
}
#imglist img{
width: 400px;
height: 300px;
}
#iconlist{
position: absolute;
right:110px;
bottom:10px;
}
#iconlist ul li{
width: 30px;
height: 30px;
border-radius: 50%;
float: left;
background: rgba(0,200,255,0.4);
line-height: 30px;
text-align: center;
margin-left: 10px;
cursor: pointer;
}


</style>
</head>
<body>
<h1>轮播图</h1>
<hr>

<div id="box">
<div id="container">
<div id="imglist">
<img src="./imgs/mm041.jpg" style="display:block">
<img src="./imgs/mm042.jpg" style="display:none">
<img src="./imgs/mm043.jpg" style="display:none">
<img src="./imgs/mm044.jpg" style="display:none">
<img src="./imgs/mm045.jpg" style="display:none">
</div>
<div id="iconlist">
<ul>
<li style="color:red;background: rgba(0,255,255,1);">1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>
</div>
</div>
<button onclick="previous()">previous</button>
<button onclick="next()">next</button>
</div>


<script>

var imgs = imglist.children;
var lis = document.getElementsByTagName('li');
console.log(lis);

var t = 0;
function run(){
t++;
if (t>=imgs.length) {
t=0;
}
showPic(t);
showBtn(t);
console.log(t);
}
var cl1 = setInterval(run,1000);

function showPic(t){
for (var i = 0; i < imgs.length; i++) {
imgs[i].style.display="none";
}
imgs[t].style.display="block";
}

function showBtn(t){
for (var i = 0; i < lis.length; i++) {
lis[i].setAttribute('style','');
}
lis[t].setAttribute('style',"color:red;background: rgba(0,255,255,1);");
}

// 鼠标划入时,解除定时器
container.onmouseover = function(){
clearInterval(cl1);
}
container.onmouseout = function(){
cl1 = setInterval('run()',1000);
}

// 鼠标滑过按钮时,切换为绑定页面
for (var i = 0; i < lis.length; i++) {
(function(i){
lis[i].onmouseover = function(){
t=i;
showPic(t);
showBtn(t);
}

})(i);
}

// 按钮控制下一张上一张
function previous(){
clearInterval(cl1);
console.log(t);
t--;
if (t<0) {
t=(imgs.length-1);
}
showPic(t);
showBtn(t);
cl1 = setInterval(run,1000);

}
function next(){
clearInterval(cl1);
t++;
if (t>(imgs.length-1)) {
t=0;
}
showPic(t);
showBtn(t);
cl1 = setInterval(run,1000);
}


</script>

</body>

图片无缝轮滚

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
    <meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
#box{
width: 800px;
height: 220px;
margin: 0 auto;
margin-top: 50px;
border: 1px solid #000;
/*overflow: auto;*/
overflow: hidden;
}
#content{width: 10000px;}
#imglist{float: left;}
#imglist img{
width: 300px;
height: 200px;
float: left;
}
</style>
</head>
<body>
<h1>图片无缝轮滚</h1>
<hr>

<div id="box">
<div id="content">
<div id="imglist">
<img src="./imgs/mm041.jpg">
<img src="./imgs/mm042.jpg">
<img src="./imgs/mm043.jpg">
<img src="./imgs/mm044.jpg">
<img src="./imgs/mm045.jpg">
<img src="./imgs/mm046.jpg">
<img src="./imgs/mm047.jpg">
<img src="./imgs/mm048.jpg">
<img src="./imgs/mm049.jpg">
<img src="./imgs/mm050.jpg">
<img src="./imgs/mm051.jpg">
<img src="./imgs/mm052.jpg">
<img src="./imgs/mm053.jpg">
<img src="./imgs/mm054.jpg">
<img src="./imgs/mm055.jpg">
</div>
</div>
</div>

<script>
var width = imglist.offsetWidth;
// console.log(width);
// 将图片集合 复制一份,并追加到当前图片集合之后
content.appendChild(imglist.cloneNode(true));

// box.scrollLeft = 500;
function scrollImage(){
if (box.scrollLeft >= width) {
box.scrollLeft = 0;
}
box.scrollLeft += 1;
// console.log(box.scrollLeft);
}
setInterval(scrollImage, 50);

</script>
</body>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<head>
<meta charset="UTF-8">
<title>图片跑马灯儿</title>
<style>
#show{
margin: 10px auto;
width: 1202px;
height: 302px;
border: 1px solid #000;
/*overflow: scroll;*/
overflow: hidden;
}
#imgList{
height: 300px;
width: 4800px;
white-space:nowrap;

}
img{
width: 400px;
height: 300px;
margin: 0;
padding: 0;
float: left;

}
</style>
</head>
<body>
<h1>图片跑马灯儿</h1>
<hr>

<div id="show">

<div id="imgList">
<img src="./imgs/mm021.jpg">
<img src="./imgs/mm022.jpg">
<img src="./imgs/mm023.jpg">
<img src="./imgs/mm024.jpg">
<img src="./imgs/mm025.jpg">
<img src="./imgs/mm026.jpg">
<img src="./imgs/mm021.jpg">
<img src="./imgs/mm022.jpg">
<img src="./imgs/mm023.jpg">


</div>

<script>

setInterval(function(){
show.scrollLeft++;
if (show.scrollLeft == 2400) {
show.scrollLeft = 0;
}
},1)

</script>


</body>

下滑加载图片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
#imglist{
width: 90%;
margin: 0 auto;
}
#imglist img{
width: 600px;
height: 400px;
background: url(./imgs/loading.gif) no-repeat center center;
}
</style>
</head>
<body>
<h1>下滑加载图片</h1>
<hr>

<div id="imglist">
<img data-src="./imgs/mm041.jpg">
<img data-src="./imgs/mm042.jpg">
<img data-src="./imgs/mm043.jpg">
<img data-src="./imgs/mm044.jpg">
<img data-src="./imgs/mm045.jpg">
<img data-src="./imgs/mm046.jpg">
<img data-src="./imgs/mm047.jpg">
<img data-src="./imgs/mm048.jpg">
<img data-src="./imgs/mm049.jpg">
<img data-src="./imgs/mm050.jpg">
<img data-src="./imgs/mm051.jpg">
<img data-src="./imgs/mm052.jpg">
<img data-src="./imgs/mm052.jpg">
<img data-src="./imgs/mm050.jpg">
<img data-src="./imgs/mm050.jpg">
<img data-src="./imgs/mm050.jpg">
<img data-src="./imgs/mm053.jpg">
<img data-src="./imgs/mm054.jpg">
<img data-src="./imgs/mm055.jpg">
<img data-src="./imgs/mm055.jpg">
</div>

<script>

var imgs = imglist.getElementsByTagName('img');

// 获取 imglist 的宽度
var box_width = imglist.offsetWidth;

// 获取 视口高度
var view_height = document.documentElement.clientHeight;
// console.log(view_height);
// 计算 横着 能加载几张图片
var x_number = Math.floor(box_width / imgs[0].offsetWidth);
// console.log(x_number);

// 首屏图片数量
// Math.ceil((视口的高度 - 首图到顶部的偏移量) / img的高度) * x_number
var first_number = Math.ceil((view_height - imgs[0].offsetTop) / imgs[0].offsetHeight) * x_number;
// console.log(first_number);

// loadImage(0, 4);
// loadImage(4, 2);
// 全局计数的变量,用于记录加载到第几张
var m = 0;
// 加载第一屏的图片
loadImage(m, first_number);
// 更新加载记录数
m += first_number;

/**
* 加载图片
* @param start 从第几张开始加载
* @param length 加载几张图片
*/
function loadImage(start, length){
for (var i = start; i < (start+length); i++) {
// 判断图片集合是否加载完毕
if (i >= imgs.length) return;

// console.log(i);
(function (i){
setTimeout(function(){
imgs[i].src = imgs[i].getAttribute('data-src');
}, 500);
})(i);
}
}

// 绑定滚动事件
window.onscroll = function (){
// 判断图片集合是否加载完毕
if (m >= imgs.length) return;
// 获取 滚动条滚过的距离
var top= document.body.scrollTop || document.documentElement.scrollTop;

// 还未加载的首图 到顶部的偏移量
var img_top = imgs[m].offsetTop;

// console.log(top, img_top);
// 判断加载下一批图片的临界点
if ((top + view_height) >= img_top) {
// 加载下一批图片
loadImage(m, x_number);
m += x_number;
}
}

</script>
</body>

蛇形文字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.strstyle {
font-size:20px;
color: #f00;
font-weight:700;
position:absolute;
top:-50px;
}
</style>
</head>
<body>
<h1>蛇形文字</h1><hr>


<script>
//文字输出
var msg = "JavaScript 蛇形文字...";
for (var i = 0; i < msg.length; i++) {
document.write('<span id="str'+i+'" class="strstyle">');
document.write(msg[i]);
document.write('</span>');
}

//绑定鼠标移动事件,得到鼠标位置
document.onmousemove = function(e){
e = e || window.event;
document.title = 'X:'+e.clientX+'Y:'+e.clientY;

//让每个字之间 有延迟的统一行动!
var m = 0;
var timer = setInterval(function(){
// console.log(m);
// 根据字数 控制次数 不能无限循环定时
if(m < msg.length) {
// 调用文字运动轨迹函数
// x坐标,y坐标,第几个字
snake(e.clientX, e.clientY, m);
m++;
}else{
//如果 次数大于等于字数,就清除定时
clearInterval(timer);
}
},50);
}

// 文字运动轨迹函数
function snake(x,y,i){
//获得每一个span元素对象
var span = document.getElementById('str'+i);
// console.log(span);
span.style.left = x + (i*25) + 'px';
span.style.top = y + 'px';
}

</script>
</body>

模态框(Modal)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<head>
<meta charset="UTF-8">
<title>模态框</title>
<style>
*{
margin: 0;
padding: 0;
list-style: none;
text-decoration: none;
}
a{
font-size: 40px;
}
#modal {
width: 100%;
height: 100%;
display: none;
position: fixed;
left: 0;top: 0;
right: 0;bottom: 0;
background: rgba(55,55,55,0.55);
}
#modalCeng{
width: 400px;
height: 200px;
background-color: #eee;
border: 3px solid #f00;
display: none;
position: fixed;
margin: 100px 50%;
left: -200px;
z-index: 99;
}
#closeBtn{
position:absolute;
right:5px;
}
</style>
</head>
<body>
<div class="container">
<a href="#" onclick="show()">点击登录</a>
</div>
<div id="modalCeng">
<button onclick="dis()" id="closeBtn"> X </button>
<br><br><br>
用户名: <input type="text" name="name"><br>
密码: <input type="password" name="pass">
<br>
<button>登录</button>
<button onclick="dis()">取消</button>
</div>
<div id="modal"></div>

<hr>
<p>line 1</p>
<p>line 2</p>
<p>line 3</p>
<p>line 4</p>
<p>line 5</p>
<p>line 6</p>
<p>line 7</p>
<p>line 8</p>
<p>line 9</p>
<p>line 10</p>
<p>line 11</p>
<p>line 12</p>
<p>line 13</p>
<p>line 14</p>
<p>line 15</p>
<p>line 16</p>
<p>line 17</p>
<p>line 18</p>
<p>line 19</p>
<p>line 20</p>
<p>line 21</p>
<p>line 22</p>
<p>line 23</p>
<p>line 24</p>
<p>line 25</p>
<p>line 26</p>
<p>line 27</p>
<p>line 28</p>
<p>line 29</p>
<p>line 30</p>
<p>line 31</p>
<p>line 32</p>
<p>line 33</p>
<p>line 34</p>
<p>line 35</p>
<p>line 36</p>
<p>line 37</p>
<p>line 38</p>
<p>line 39</p>
<p>line 40</p>



<script>
var modal = document.getElementById('modal');
var mc = document.getElementById('modalCeng');

function show () {
modal.style.display = 'block';
mc.style.display = 'block';
}

function dis () {
modal.style.display = 'none';
mc.style.display = 'none';
}
</script>
</body>

自定义输出表格(节点方式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<head>
<meta charset="UTF-8">
<title>JS</title>
</head>
<body>
<h1>XML DOM Table - 自定义</h1>
<hr>
行:<input type="text" name="num1" id="num1">
列<input type="text" name="num1" id="num2">
<button onclick="createTab()" id="tabshow">建立表格</button>
<div id="tables"></div>

<script>
function createTab () {
//获取要生成的行列数
var rows = document.getElementById('num1').value;
var cols = document.getElementById('num2').value;
//创建table 和 tr节点
var tab = document.createElement('table');
var tr = document.createElement('tr');

tab.width = '800';
tab.border = '1';
tab.cellSpacing = '0';
tables.appendChild(tab);//添加节点 table
tab.appendChild(tr);//添加节点 tr

//th 表头部分
for (var i = 0; i < cols; i++) {
var th = document.createElement('th');
tr.appendChild(th);
th.innerHTML = i;
}

//rows x cols 创建表格内容
for (var i = 0; i < rows; i++) {
tr = document.createElement('tr');
tab.appendChild(tr);
if (i%2 == 0 ) {
tr.style.backgroundColor='#f90';
}
for (var j = 0; j < cols; j++) {
var td = document.createElement('td');
tr.appendChild(td);
td.innerHTML = i +'-'+ j;
}
}
}
</script>
</body>