JS 定时器、轮播图

简介: JS 定时器、轮播图

定时器


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
        }
        #box1{
            width: 100px;
            height: 100px;
            background-color: burlywood;
            position: absolute;
        }
        #box2{
            width: 100px;
            height: 100px;
            background-color: aqua;
            position: absolute;
            top: 200px;
        }
    </style>
    <!-- <script src="./JS文件/tools.js"></script> -->
    <script>
        window.onload = function(){
            var btn01 = document.getElementById("btn01");
            var btn02 = document.getElementById("btn02");
            var btn03 = document.getElementById("btn03");
            var btn04 = document.getElementById("btn04");
            var box1 = document.getElementById("box1");
            var box2 = document.getElementById("box2");
            btn01.onclick = function(){
                // alert()
                move(box1,"left",800,30);
            };
            btn02.onclick = function(){
                // alert()
                move(box1,"left",0,30);
            };
            btn03.onclick = function(){
                // alert()
                move(box2,"left",800,10);
            };
            btn04.onclick = function(){
                // alert()
                move(box2,"width",800,10,function(){
                    move(box2,"height", 400, 10,function(){
                        move(box2,"top", 0, 10, function(){
                            move(box2,"width",200 , 10);
                        });
                    });
                });
            };
        };
             /*
            创建一个可以执行简单动画的样式
            参数:
                obj 要执行动画的对象
                attr 要执行动画的样式
                target 执行动画的目标位置
                speed 移动速度
                callback 回调函数,这个函数将会在动画执行完毕后执行
        */
        function move(obj,attr, target,speed,callback){
            // 关闭一个定时器
            clearInterval(obj.timer)
            var current = parseInt(getStyle(obj, attr));
            // alert(getStyle(obj, attr))
            if(current > target){
                speed = -speed;
            }
            obj.timer = setInterval(function(){
                var oldValue = parseInt(getStyle(obj, attr));
                var newValue = oldValue + speed;
                // 判断newValue 是否小于target,若小于向左移动
                // 判断newValue 是否大于target,若大于向右移动
                if((speed < 0 && newValue < target) || (speed > 0 && newValue >target)){
                    newValue = target;
                }
                obj.style[attr] = newValue +"px";
                // 设置当变化达到想要效果后停止
                if(newValue == target){
                    clearInterval(obj.timer);
                    // 动画结束后执行回调函数
                    callback && callback();
                }
            },30);
            // 定义一个函数,用来获取指定元素的当前样式
                // obj 要获取样式的名称
                // name 要获取的样式名
            function getStyle(obj ,name){
                // 
                if (window.getComputedStyle){
                    return getComputedStyle(obj, null)[name];
                }
                else{
                    return obj.currentStyle[name];
                }
            };
        };
    </script>
</head>
<body>
    <button id="btn01">点击按钮以后box1向右移动</button>
    <button id="btn02">点击按钮以后box1向左移动</button>
    <button id="btn03">点击按钮以后box2向右移动</button>
    <button id="btn04">测试按钮</button>
    <br><br>
    <div id="box1"></div>
    <div id="box2"></div>
</body>
</html>


轮播图


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="../CSS/reset.css">
    <style>
        #outer{
            width: 220px;
            height: 200px;
            margin: 20px auto;
            padding: 10px 0;
            background-color: aqua;
            position: relative;
            overflow: hidden;
        }
        #imgList{
            /* 去除项目符号 */
           /* list-style: none; */
           position: absolute;
        }
        #imgList li{
            float: left;
            margin: 0 10px;
        }
        #navDiv{
            position: absolute;
            bottom: 25px;
        }
        #navDiv a{
            float: left;
            width: 10px;
            height: 10px;
            background-color: red;
            opacity: 0.6;
            margin: 0 2px;
            border-radius:50%;
        }
        #navDiv a:hover{
            background-color: black;
        }
    </style>
    <script src="../js/JS文件/tools.js"></script>
    <script>
        window.onload = function(){
            var imgList = document.getElementById("imgList");
            // 获取页面中所有的img标签
            var imgArr = document.getElementsByTagName("img");
            // 设置imgList的宽度
            imgList.style.width = 220*imgArr.length +"px";
            var navDiv = document.getElementById("navDiv");
            var outer = document.getElementById("outer");
            // 设置navDivde left值
            navDiv.style.left = (outer.offsetWidth - navDiv.offsetWidth)/2 +"px";
            var index = 0;
            var allA = document.getElementsByTagName("a");
            allA[index].style.backgroundColor = "black";
            // 设置点击圆点,切换图片
            for(var i=0; i < allA.length;i++){
                allA[i].num = i;
                allA[i].onclick = function(){
                    clearInterval(timer);
                    allA[index].style.backgroundColor = "";
                    // allA[index].style.opacity = "0.6";
                    // 切换图片
                    index = this.num;
                    // imgList.style.left = -this.num*220  + "px";
                    setA();
                    move(imgList, "left", -220*index,20, function(){
                        autoChange();
                    })
                    // 
                    // allA.style.backgroundColor = "red";
                }
            }
            function setA(){
                if(index >= allA.length){
                        index = 0;
                        imgList.style.left = 0  + "px";
                    }
                for (var i = 0; i < allA.length; i++) {
                    if(i == allA.length-1){
                        allA[0].style.backgroundColor = "";
                        allA[index].style.backgroundColor = "black";
                    }
                   allA[i].style.backgroundColor = "";
                }
                allA[index].style.backgroundColor = "black"; 
            };
            var timer;
            // 自动切换
            autoChange();
            // 创建一个函数,用来开启自动切换图片
            function autoChange(){
                // 开启定时器
               timer = setInterval(function(){
                    index++;
                    move(imgList, "left", -220*index,20, function(){
                        setA();
                    })
                },1000)
            };
        };
    </script>
</head>
<body>
    <div id="outer">
        <ul id="imgList">
            <li><img src="./img/1.jpg"></li>
            <li><img src="./img/2.jpg"></li>
            <li><img src="./img/3.jpg"></li>
            <li><img src="./img/4.jpg"></li>
            <li><img src="./img/5.jpg"></li>
            <li><img src="./img/6.jpg"></li>
            <li><img src="./img/1.jpg"></li>
        </ul>
        <div id="navDiv">
            <a href="##"></a>
            <a href="##"></a>
            <a href="##"></a>
            <a href="##"></a>
            <a href="##"></a>
            <a href="##"></a>
        </div>
    </div>
</body>
</html>
相关文章
|
26天前
|
JavaScript
时尚简洁的js轮播图特效插件
这是一款时尚简洁的js轮播图特效插件。该轮播图采用es6语法制作,底部带缩略图和描述信息。图片和描述信息在切换时同步滑动。
|
3月前
|
前端开发
js-基础轮播图制作
js-基础轮播图制作
36 7
|
4月前
|
JavaScript 前端开发
js轮播图练习
文章介绍了如何使用HTML、CSS和JavaScript创建一个简单的轮播图效果。通过`img`标签展示图片,并通过点击下方的点(`span`标签)切换图片。文章提供了完整的HTML结构、CSS样式和JavaScript代码,以及图片的展示和轮播图的效果图。
js轮播图练习
|
3月前
|
JavaScript 前端开发
js之一次性定时器
js之一次性定时器
23 1
|
3月前
|
JavaScript 前端开发
js之永久定时器
js之永久定时器
32 1
|
3月前
|
JavaScript 前端开发
js轮播图有左右箭头和小点
js轮播图有左右箭头和小点
40 1
|
4月前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
5月前
|
JavaScript
js轮播图制作
js轮播图制作
46 1
|
5月前
|
JavaScript 前端开发
解决在JS中阻止定时器“重复”开启问题、Vue中定时器的使用
这篇文章讨论了在JavaScript和Vue中如何避免定时器重复开启的问题,并提供了一个模拟场景和代码示例,演示了在开启新定时器前清除旧定时器的方法。
解决在JS中阻止定时器“重复”开启问题、Vue中定时器的使用
|
5月前
|
JavaScript
js轮播图功能
js轮播图功能
31 0