任务一:生成图片广告 首先,能够用HTML+CSS+JavaScript在页面正中生成一幅广告图片。 其次,用JavaScript数组在页面上放置多张广告图片,同时动态计算不同广告位之间的布局,实现水平等间距布局。 最后,用JavaScript代码实现多张广告图片轮播效果:在页面正中间每隔3秒切换不同的广告图片,多张图片轮流显示。
任务二:程序逻辑训练 在code.org上完成系列任务如下,加深对代码逻辑和程序语法的理解。 变量,条件和函数相关任务(https://studio.code.org/s/csp4-2020) 列表、循环和遍历相关任务(https://studio.code.org/s/csp5-2020) 计算机程序算法相关的任务(https://studio.code.org/s/csp6-2020) 可选任务:参数、返回值和库(https://studio.code.org/s/csp7-2020)
拓展:实现多级联动菜单 用HTML+CSS+JavaScript实现网页上常见的“省市区多级联动下拉菜单”(理解树型数据结构) 选择直辖市的过程。 选择省份的过程。 任务提示 不必完全参照上图中的下拉列表,数据可以自己造 淡黄色表示鼠标悬浮状态的背景,可自行设定颜色 熟练掌握2~3种常见的计算机算法(例如冒跑排序:https://algorithm-visualizer.org/brute-force/bubble-sort) 使用算法可视化网站运行一种你不熟悉的排序或者查找算法 尝试把它用JavaScript代码再写一遍并能成功执行 将代码运行后的效果和网站上运行的效果进行对照,看看结果是否一致 重复以上步骤,直到能够熟练掌握2~3种算法为止。
自测
- 实现对数组[0,912,1,6,3,7,11]的冒泡排序。
- 解释JavaScript中的堆和栈数据结构的区别。
- a=1,b=2,使用至少三种方法交换变量a和b的值。
- 使用for循环求出0~300之间的奇数之和。
- 去除数组[8,7,2,1,5,0,1,9,2]中重复的值,相同的值只保留一个。
- 使用非递归方式对数组[8,7,12,1,5,0,6,9,2]执行折半查找。
分割线任务开始 任务一:生成图片广告 首先,能够用HTML+CSS+JavaScript在页面正中生成一幅广告图片。 代码如下:
```html
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#ggs{
width: 400px;
}
.mydiv{
position: sticky;
top: 200px;
margin-left: 35%;
}
</style>
</head>
<body>
<div class="mydiv">
<img id="ggs" src="D:\C站能力认证\任务04\轮播图-宠物\VCG21gic19991576.webp">
</div>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
</body>
</html>
其次,用JavaScript数组在页面上放置多张广告图片,同时动态计算不同广告位之间的布局,实现水平等间距布局。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
#ggs{
width: 400px;
}
.mydiv{
position: sticky;
top: 200px;
margin-left: 35%;
}
</style>
</head>
<body>
<div class="mydiv">
<img id="ggs" src="D:\C站能力认证\任务04\轮播图-宠物\VCG21gic19991576.webp">
</div>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
</body>
</html>
最后,用JavaScript代码实现多张广告图片轮播效果:在页面正中间每隔3秒切换不同的广告图片,多张图片轮流显示。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
position: static;
}
#ggs{
width: 400px;
}
.mydiv{
position: sticky;
top: 200px;
margin-left: 35%;
}
</style>
</head>
<body>
<script>
window.onload = function(){
let ggs = document.getElementById("ggs");
var imgs = ["file:///D:/C%E7%AB%99%E8%83%BD%E5%8A%9B%E8%AE%A4%E8%AF%81/%E4%BB%BB%E5%8A%A104/%E8%BD%AE%E6%92%AD%E5%9B%BE-%E5%AE%A0%E7%89%A9/VCG41157532246.webp",
"file:///D:/C%E7%AB%99%E8%83%BD%E5%8A%9B%E8%AE%A4%E8%AF%81/%E4%BB%BB%E5%8A%A104/%E8%BD%AE%E6%92%AD%E5%9B%BE-%E5%AE%A0%E7%89%A9/VCG41157684448.webp",
"file:///D:/C%E7%AB%99%E8%83%BD%E5%8A%9B%E8%AE%A4%E8%AF%81/%E4%BB%BB%E5%8A%A104/%E8%BD%AE%E6%92%AD%E5%9B%BE-%E5%AE%A0%E7%89%A9/VCG211273959837.webp",
"file:///D:/C%E7%AB%99%E8%83%BD%E5%8A%9B%E8%AE%A4%E8%AF%81/%E4%BB%BB%E5%8A%A104/%E8%BD%AE%E6%92%AD%E5%9B%BE-%E5%AE%A0%E7%89%A9/VCG211330587343.webp"];
var imgsLen = imgs.length;
let flag = 0;
function gg(imgs,imgsLen){
if(flag > imgsLen - 1){
flag = 0;
}
ggs.src = imgs[flag++];
}
var timer = setInterval(function(){
gg(imgs,imgsLen);
},1500);
}
</script>
<div class="mydiv">
<img id="ggs" >
</div>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
</body>
</html>
任务二:程序逻辑训练 在code.org上完成系列任务如下,加深对代码逻辑和程序语法的理解。 该网站网速不好,暂时略过。
拓展:实现多级联动菜单 用HTML+CSS+JavaScript实现网页上常见的“省市区多级联动下拉菜单”(理解树型数据结构) 选择直辖市的过程。 选择省份的过程。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.mydiv select{
width: 200px;
height: 30px;
}
</style>
</head>
<body>
<script>
window.onload = function() {
let sheng_s = document.getElementById("sheng");
let shi_s = document.getElementById("shi");
let xian_s = document.getElementById("xian");
let info = document.getElementById("info");
let sheng = ["陕西省","甘肃省"];
let shi = [
["西安市","咸阳市"],
["白银市","天水市"]
];
let xian = [
[
["莲湖区","长安区"],
["礼泉县","兴平县"]
],
[
["靖远县","景泰县"],
["武山县","清水县"]
]
];
let sheng_info_str = "";
let shi_info_str = "";
let xian_info_str = "";
sheng_s.innerHTML = "<option value=''>---未选择---</option>";
for (let sheng_i = 0; sheng_i < sheng.length; sheng_i++) {
sheng_s.innerHTML += "<option value='"+sheng_i+"'>"+sheng[sheng_i]+"</option>";
}
sheng_s.onchange = function(){
sheng_info_str = "";
shi_info_str = "";
xian_info_str = "";
sheng_info_str += sheng[sheng_s.value];
shi_s.innerHTML = "";
xian_s.innerHTML = "";
shi_s.innerHTML = "<option value=''>---未选择---</option>";
for (let shi_i = 0; shi_i < shi.length; shi_i++) {
shi_s.innerHTML += "<option value='"+shi_i+"'>"+shi[sheng_s.value][shi_i]+"</option>";
}
shi_s.onchange = function(){
shi_info_str = "";
xian_info_str = "";
shi_info_str += shi[sheng_s.value][shi_s.value];
xian_s.innerHTML = "";
xian_s.innerHTML = "<option value=''>---未选择---</option>";
for (let xian_i = 0; xian_i < xian.length; xian_i++) {
xian_s.innerHTML += "<option value='"+xian_i+"'>"+xian[sheng_s.value][shi_s.value][xian_i]+"</option>";
}
xian_s.onchange = function(){
xian_info_str = "";
xian_info_str += xian[sheng_s.value][shi_s.value][xian_s.value];
info.innerText = "您的选择:" + sheng_info_str + " " + shi_info_str + " " + xian_info_str;
}
}
}
}
</script>
<div class="mydiv">
<span>省:</span>
<select id="sheng">
</select>
<span>市:</span>
<select id="shi">
</select>
<span>县:</span>
<select id="xian">
</select>
<div id="info">您的选择:</div>
</div>
</body>
</html>
**自测
- 实现对数组[0,912,1,6,3,7,11]的冒泡排序。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>排序</title>
</head>
<body>
<script>
let arr = [0,9,12,1,6,3,7,11];
function small2big(arr){
for(let i=0;i < arr.length-1;i++){
for(let j=0;j < arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
function big2small(arr){
for(let i=0;i < arr.length-1;i++){
for(let j=0;j < arr.length-i-1;j++){
if(arr[j] < arr[j+1]){
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
console.log("由小到大排序:"+small2big(arr));
console.log("由大到小排序:"+big2small(arr));
function quick_sort(arr, L, R){
if (L < R){
let i = L;
let j = R;
let x = arr[i];
while (i < j){
while(i < j && arr[j] > x)
j--;
if(i < j)
arr[i++] = arr[j];
while(i < j && arr[i] < x)
i++;
if(i < j)
arr[j--] = arr[i];
}
arr[i] = x;
quick_sort(arr, L, i-1);
quick_sort(arr, i+1, R);
}
return arr;
}
console.log("快速排序:"+quick_sort(arr,0,arr.length-1));
function insertSort(arr) {
let preIndex, current;
for (let i = 1; i < arr.length; i++) {
preIndex = i - 1;
current = arr[i];
while (preIndex >= 0 && current < arr[preIndex]) {
arr[preIndex + 1] = arr[preIndex];
preIndex--;
}
arr[preIndex + 1] = current;
}
return arr;
}
console.log("插入排序:" + insertSort(arr));
</script>
</body>
</html>
<script type="text/javascript">
var a = 1, b = 2;
var c;
c = a;
a = b;
b = c;
a = b - a;
b = b - a;
a = a + b;
a = a^b;
b = a^b;
a = a^b;
</script>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>奇数之和</title>
</head>
<body>
<script>
let info = 0;
let num = 0;
for(let i = 0;i <= 300;i++){
if(i % 2 === 1){
info++;
num += i;
}
}
console.log("奇数个数为:" + info);
console.log("奇数总和为:" + num);
</script>
</body>
</html>
- 去除数组[8,7,2,1,5,0,1,9,2]中重复的值,相同的值只保留一个。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>去除重复</title>
</head>
<body>
<script>
let oldarr = [8, 7, 2, 1, 5, 0, 1, 9, 2];
function unique(oldarr) {
let newarrs = [];
for(var i = 0; i < oldarr.length; i++){
if(newarrs.indexOf(oldarr[i]) == -1){
newarrs.push(oldarr[i]);
}
}
return newarrs;
}
console.log("数组去重:" + unique(oldarr));
</script>
</body>
</html>
- 使用非递归方式对数组[8,7,12,1,5,0,6,9,2]执行折半查找。**
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>二分查找</title>
</head>
<body>
<script>
let arr = [8, 7, 12, 1, 5, 0, 6, 9, 2];
function small2big(arr){
for(let i=0;i < arr.length-1;i++){
for(let j=0;j < arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
function erfen(arr,num) {
let len = arr.length;
let tou = 0;
let wei = len - 1;
while(tou <= wei){
let mid = Math.floor((tou + wei)/2);
if(arr[mid] === num){
return mid;
}
else if(arr[mid] < num){
tou = mid + 1;
}
else if(arr[mid] > num){
wei = mid - 1;
}
else{
return;
}
}
}
console.log("排好序的数组:" + arr);
console.log("数字7所在索引位置:" + erfen(small2big(arr),7));
</script>
</body>
</html>
|