学习javaScript过程中,一些练习Demo。在之前跟着老师学的过程中,感觉js的语法知识和java基本一致,所以前面的基础知识过的很快。目前在学Dom编程,练习的一些例子作为自己学习过程的见证吧。
这个案例主要是熟悉按钮操作,以及切换图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>作业二</title>
</head>
<body>
<Button id="preBtn"> 上一张</Button>
<img src="E:\js基础学习\image\1.jpg" id="img">
<Button id="nextBtn">下一张</Button>
<script>
var preBtn = document.getElementById("preBtn");
var nextBtn = document.getElementById("nextBtn");
var image = document.getElementById("img");
//任务把imageSrc切分 得到最后一个串,然后拼接
//console.log(image);
var idx = 1; //弄一个信号量
image.style.width = '200px';
image.style.high = '200px';
preBtn.onclick = function() {
//先判断
if(idx <= 0) {
idx--;
} else {
idx = 3;
}
//后验收 -- 比较好
idx--;
if (idx <= 0){
idx = 3;
}
image.src = 'E:/js基础学习/image/' + idx + '.jpg';
};
nextBtn.onclick = function() {
idx++;
if (idx > 3){
idx = 1;
}
image.src = 'E:/js基础学习/image/' + idx + '.jpg';
};
</script>
</body>
</html>
案例2
js操作元素
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<style>
p{
font-size : 50px;
}
.disable{
background : red;
}
.able {
background : #ddd;
}
</style>
</head>
<body>
<Button id='bigBtn'>放大</Button>
<Button id='smallBtn'>缩小</Button><br>
<p id='text'>aaaaaaaaaaaa</p>
<script>
var bigBtn = document.getElementById('bigBtn');
var smallBtn = document.getElementById('smallBtn');
var text = document.getElementById('text');
var fontSize = 50;
bigBtn.onclick = function() {
smallBtn.className='able';
fontSize += 10;
if(fontSize > 100) {
fontSize = 100;
//方法一设置按钮背景
//bigBtn.style.background = 'red';
bigBtn.className = 'disable';
}
// text.font-size = fontSize + 'px';
text.style.fontSize = fontSize + 'px';
}
smallBtn.onclick = function() {
//放大按钮能用
bigBtn.className='able';
fontSize -= 10;
if(fontSize < 10) {
fontSize = 10;
smallBtn.className = 'disable';
}
// text.font-size = fontSize + 'px';
text.style.fontSize = fontSize + 'px';
}
</script>
</body>
</html>
案例3
通过获取文本框值,调节页面背景RGB
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'>
<style>
lable{
font-size : 20px;
}
body{
background: rgb(10,111,111);
}
</style>
</head>
<body id='body'>
<label>R
<Button id='dBtn1'>-</Button>
<input id='ipt1' value='10' type='text'/>
<Button id='aBtn1'>+</Button>
</label><br>
<label>G
<Button id='dBtn2'>-</Button>
<input id='ipt2' value='111' />
<Button id='aBtn2'>+</Button>
</label><br>
<label>B
<Button id='dBtn3'>-</Button>
<input id='ipt3' value='111' />
<Button id='aBtn3'>+</Button>
</label><br>
<Button id='go'>GO</Button>
<script>
var dBtn1 = document.getElementById('dBtn1');
var dBtn2 = document.getElementById('dBtn2');
var dBtn3 = document.getElementById('dBtn3');
var ipt1 = document.getElementById('ipt1');
var ipt2 = document.getElementById('ipt2');
var ipt3 = document.getElementById('ipt3');
var aBtn1 = document.getElementById('aBtn1');
var aBtn2 = document.getElementById('aBtn2');
var aBtn3 = document.getElementById('aBtn3');
var body = document.getElementById('body');
var rvalue = ipt1.value;
var gvalue = ipt2.value;
var bvalue = ipt3.value;
var go = document.getElementById('go');
go.onclick = function() {
rvalue = ipt1.value;
gvalue = ipt2.value;
bvalue = ipt3.value;
changeColor();
}
dBtn1.onclick = function() {
rvalue--;
changeColor();
}
aBtn1.onclick = function() {
rvalue++;
changeColor();
}
dBtn2.onclick = function() {
gvalue--;
changeColor();
}
aBtn2.onclick = function() {
gvalue++;
changeColor();
}
dBtn3.onclick = function() {
bvalue--;
changeColor();
}
aBtn3.onclick = function() {
bvalue++;
changeColor();
}
function changeColor(){
if(rvalue < 0) rvalue = 0;
if(gvalue < 0) gvalue = 0;
if(bvalue < 0) bvalue = 0;
if(rvalue > 255) rvalue = 255;
if(gvalue > 255) gvalue = 255;
if(bvalue > 255) bvalue = 255;
ipt1.value = rvalue;
ipt2.value = gvalue;
ipt3.value = bvalue;
body.style.background='rgb(' + rvalue +','+gvalue+','+bvalue+')';
}
</script>
</body>
</html>
案例4
这个案例主要是用用来体会js基于面向对象编程的效果.实现的效果是使用定时器每隔1s中new出一个对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
div{
width : 108px;
height : 116px;
position : absolute;
background : url('E:/js基础学习/image/timg.jpg');
background-position : 0px -232px;
}
</style>
</head>
<body>
<script>
function Human(left, top){
this.left = left;
this.top = top;
//创建方法--初始化对象
this.init = function() {
this.dom = document.createElement('div');
//拼接到body
document.body.appendChild(this.dom);
this.dom.style.top = this.top + 'px';
this.dom.style.left = this.left + 'px';
}
//移动方法
this.move = function() {
var idx = 0;
var self = this;
//由于在setInterval()中this指的是当前窗口,故用
//self接收一下
this.timer = setInterval(function() {
idx++;
self.left += 20;
console.log(self.left);
if(idx > 4) idx = 0;
if(self.left >= 1000) {
self.die();
}
self.dom.style.left = self.left + 'px';
self.dom.style.backgroundPosition = -108*idx + 'px -232px';
}, 200);
}
//销毁对象
this.die= function() {
document.body.removeChild(this.dom);
clearInterval(this.timer);
}
this.init();
this.move();
}
setInterval(function() {
new Human(200, parseInt(Math.random() * 500));
}, 1000)
</script>
</body>
</html>
做个简单的回顾
代码主要包括5个部分:(1)js中闭包问题(2)复习一下js中的数组 (3)js中的字符串处理方法(4)字符串转数组 (5)IIFE及时调用的写法
<!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>
<script>
//1. 闭包问题
/* function outer() {
var a = 10
function inner() {
console.log(a)
}
return inner;
}
// 可以在外部访问函数内部局部变量,局部函数
var inn = outer()
inn()
*/
// 2. 数组
// 一组数据的有序集合,可以放任何类型,一般存放同一类型
// length : 数组长度
var arr = [1, 2, 3] //object
// 通过arr.length 修改长度
arr.length = 10
// arr里面什么都可以方法
arr = ['123', true, undefined, function () {
}]
// 数组的遍历
// 数组常用头尾操作
// pop() push() shift() unshift()
var arr = ['d', 'x', 'n', 'b']
// push 在数组尾部插入元素 返回值是数组长度
// var a = arr.push('xxx')
// 从尾部删除 返回的是删除的元素
// var a = arr.pop()
// 从头部删除 返回的是头部元素
// var a = arr.shift();
// 从头部插入 返回的是插入元素后数组的长度
// var a = arr.unshift('mmm','qqqq')
// 拼接数组 concat 要用一个新数组接收
var arr = [1, 2, 3, 4]
//slice(start, end)返回新数组 包括开始位置不包括终点
// var newArr = arr.slice(1,3)
// 2-arr.length-1
// slice(-3,-1) 从后截取
// var newArr = arr.slice(3)
// splice(start, num)
// arr.splice(-3,2) 对原始数组操作
// arr.splice(2,2,'hh','ee') 替换
// arr.sort()排序
// var arr = [12,123,1,21]
// arr.sort(function(a,b){
// return a-b
// })
// var str = arr.join('')
// console.log(str)
// 3.字符串处理
/* length: 长度
charAt() : 返回下标为n的字符
indexOf() : 查找字符首次出现位置
lastIndexOf()
slice(start, end)
split() 转数组
subString()
subStr()
var str = '字符串处理学习 你好字符串 hhh'
console.log(str.length)
console.log(str.charAt(5))
var newStr = str.concat('好好学习')
console.log(newStr)
// slice() 截取字符串
// str.split(' ') //拆分字符串变成数组
// subStr() 从开始位置 长度
// str.substring(0, 5);
*/
//4 数组转字符串
// 首字母替换成大写
var str = 'this is a pen'
// 切割字符串,转换成数组
var arr = str.split(' ')
for (var i = 0; i < arr.length; i++) {
// 把小写转大写
arr[i] = arr[i].charAt(0).toUpperCase() +
arr[i].slice(1)
}
// 拼成字符串
var newStr = arr.join(' ')
console.log(newStr)
// 5.IIFE及时调用函数表达式
// 使用+ 、 - 把函数降级
+ function hehe() {
console.log('hehhe')
}()
// 方法2 iife已经把降级成函数表达式 编程了匿名函数
// 不能直接调用(function ...)()
// (function hh() {
// })()
// 数组观察闭包
var arr = []
for (var i = 0; i < 10; i++) {
arr[i] = function () {
console.log(i)
}
}
// 这里打印的都是10,因为在数组中只是函数的定义
// 只是声明了i
arr[0]()
arr[1]()
//解决办法
var arr = []
for (var i = 0; i < 10; i++) {
(
function hh(i) {
arr[i] = function () {
console.log(i)
}
}
)(i)
}
// 这里打印的都是10,因为在数组中只是函数的定义
// 只是声明了i
arr[0]()
arr[1]()
</script>
</body>
</html>