zoukankan      html  css  js  c++  java
  • js的一些实用小案例

    1、轮播图(思路见代码)

      实现效果:点击下方的按钮,实现相应的图片的切换,点击左右按钮,实现向左或者向右切换图片,轮播图自动轮播,当鼠标移到图片上方,自动轮播停止,鼠标移除后,自动轮播恢复

      实现思路: 对标签的class属性的属性值进行操作,先写好对应的属性值的样式及效果,然后利用js对属性值进行操作

    <!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>
            .container{
                width: 360px;
                height: 277px;
                border: 10px solid #000;
                overflow: hidden;
                margin: 0 auto;
                position: relative;
            }
            .btns{
                position: absolute;
                bottom: 20px;
                width: 100%;
                height: 20px;
                background: #fff;
                z-index: 999;
            }
            .btns button{
                border-radius: 50%;
            }
            .content{
                height: 257px;
                text-align: center;
                line-height: 257px;
                font-size: 100px;
                position: relative;
            }
            .box{
                width: 100%;
                height: 100%;
                position: absolute;
                background: #000;
                color: #fff;
                opacity: 0;
                /* transform: rotate(0deg); */
                transition: opacity 1s,transform 1s;
            }
            .box img{
                width: 100%;
                height: 100%;
            }
            button.active{
                color: aliceblue;
                background: black;
            }
            .box.active{
                display: block;
                z-index: 1;
                opacity: 1;
                /* transform: rotate(360deg); */
            }
            #left_btn,#right_btn{
                position: absolute;
                top: 50%;
                margin-top: -10px;
                z-index: 999;
            }
            #right_btn{
                right: 0;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <div class="btns">
                <button data-index="0" class="btn active">1</button>
                <button data-index="1" class="btn">2</button>
                <button data-index="2" class="btn">3</button>
            </div>
            <div class="content">
                <div class="box active"><img src="https://img20.360buyimg.com/da/s1180x940_jfs/t1/22886/39/6392/67839/5c53100aEeaae8352/7a4d3de1156321ae.jpg.webp" alt=""></div>
                <div class="box"><img src="https://img11.360buyimg.com/pop/s1180x940_jfs/t1/94077/40/13431/91413/5e57629eE39ab060a/4adceb3e5e3863fe.jpg.webp" alt=""></div>
                <div class="box"><img src="https://img20.360buyimg.com/pop/s1180x940_jfs/t1/95963/25/13739/84993/5e606cc3Eaf064df7/edd18ca669882399.jpg.webp" alt=""></div>
            </div>
            <button id="left_btn">left</button>
            <button id="right_btn">right</button>
        </div>
        <script>
            var ele_btns = document.querySelectorAll(".btn");
    
            var ele_boxs = document.querySelectorAll(".box");
            var ele_left = document.getElementById("left_btn");
            var ele_right = document.getElementById("right_btn");
            var ele_container = document.querySelector(".container")
            var index = null;
    
            //轮播图下方按钮
            for(var i = 0; i < ele_btns.length; i++){
                ele_btns[i].addEventListener("click" , function(){
                    //调用下方函数移除所有的active属性
                    removeClass(ele_btns , "active");
                    removeClass(ele_boxs , "active");
                    for(var j = 0; j < ele_btns.length; j++){
                        //确定点击的按钮对应的图片
                        if(this === ele_btns[j]){
                            break;
                        }
                    }
                    //将对应的图片的下标赋值给全局变量,(对应下标即获取的ele_boxs中的下标)
                    index = j;
                    //给当前点击的按钮添加active属性
                    this.className += " active";
                    //给当前对应的按钮的图片添加active属性
                    ele_boxs[index].className += " active";
                })
            }
            
            //左边按钮
            ele_left.addEventListener("click" , function(){
                //调用下方函数移除所有的active属性
                removeClass(ele_btns , "active");
                removeClass(ele_boxs , "active")
                //向左切换,即下标递减
                index--;
                //当下标小于0时从左后面的图片重新开始
                if(index < 0){
                    index = ele_btns.length -1;
                }
                //对应的按钮及图片添加active
                ele_btns[index].className += " active";
                ele_boxs[index].className += " active"
            })
    
            ele_right.addEventListener("click" , function(){
                removeClass(ele_btns , "active");
                removeClass(ele_boxs , "active")
                index++;
                if(index > ele_btns.length - 1){
                    index = 0;
                }
                ele_btns[index].className += " active";
                ele_boxs[index].className += " active"
            })
    
            //定时自动轮播图片
            var timer = null;
            timer = setInterval(function(){
                removeClass(ele_btns , "active");
                removeClass(ele_boxs , "active")
                index++;
                if(index > ele_btns.length - 1){
                    index = 0;
                }
                ele_btns[index].className += " active";
                ele_boxs[index].className += " active"
            } , 1000)
    
            //当鼠标移到图片上方时,停止自动轮播
            ele_container.addEventListener("mouseover", function(){
                clearInterval(timer);
            })
    
            //当鼠标从图片上方移走时,开启自动轮播
            ele_container.addEventListener("mouseout", function(){
                    timer = setInterval(function(){
                    removeClass(ele_btns , "active");
                    removeClass(ele_boxs , "active")
                    index++;
                    if(index > ele_btns.length - 1){
                        index = 0;
                    }
                    ele_btns[index].className += " active";
                    ele_boxs[index].className += " active"
                } , 1000)
            })
    
            //清除所有的active属性
            function removeClass(ele , class_name){
                for(var i = 0; i <ele.length ; i++){
                    //将所有的属性名切割成数组
                    ele_class_arr = ele[i].className.split(" ");
                    //如果数组中存在想要删除的属性(即上方的active属性),就进入if中
                    if(ele_class_arr.indexOf(class_name) !== -1){
                        //删除掉active属性
                        ele_class_arr.splice(ele_class_arr.indexOf(class_name) , 1);
                    }
                    //将删除掉active属性的数组重新转换成字符串
                    ele_class_str = ele_class_arr.join(" ");
                    //将转换完成之后的字符串赋予给对应的DOM的属性中
                    ele[i].className = ele_class_str;
                }
            }
         
         
        </script>
    </body>
    </html>
    View Code

    2、鼠标拖拽回放

      实现效果:鼠标左键在box上方按下,保持鼠标左键按下拖拽鼠标,box会跟随鼠标一起移动,鼠标左键抬起,box停止跟随,点击回放按钮,box会按照原路径进行返回

      实现思路:拖拽 :将鼠标的位置赋值给按照一定的规律赋值给box的偏移量,回放:将鼠标的移动坐标添加到一个对象中,点击回放,倒序将坐标赋值给box偏移量

    <!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>
            #box{
                width: 100px;
                height: 100px;
                background: yellowgreen;
                position: absolute;
                left: 0;
                top: 0;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <button id="replay">回放</button>
        </div>
        <script>
            var ele_box = document.getElementById("box");
            var ele_replay = document.getElementById("replay")
            //开启鼠标拖拽判断
            var flag = false;
    
            //鼠标按下时到box的距离
            var offset_X = null;
            var offset_Y = null;
            //拖拽边界
            var right_boundary = null;
            var bottom_boundary = null;
    
            var position_list = [];
            
            //鼠标按下
            ele_box.addEventListener("mousedown" , function( evt ){
                flag = true;
                var e = evt || event;
                //获取鼠标按下时距离box的边框的距离
                offset_X = e.offsetX;
                offset_Y = e.offsetY;
                //右边界与下边界
                right_boundary = document.body.offsetWidth - ele_box.offsetWidth;
                bottom_boundary = document.documentElement.clientHeight - ele_box.offsetHeight;  
                
                //记录鼠标按下时box的位置
                position_list.push({
                    x : ele_box.offsetLeft,
                    y : ele_box.offsetTop
                })
                console.log(position_list)
            })
            //鼠标移动时
            document.addEventListener("mousemove" , function( evt ){
                var e = evt || event;
                if(flag === false){
                    return false
                }
                //让鼠标的光标处在鼠标点击的位置
                var left = e.clientX - offset_X;
                var top = e.clientY - offset_Y;
    
                //判断时候到了边界
                top = top <= 0 ? 0 : top;
                top = top >= bottom_boundary ? bottom_boundary : top;
                left = left <= 0 ? 0 :left;
                left = left >= right_boundary ? right_boundary : left;
    
                ele_box.style.left = left + "px";
                ele_box.style.top = top + "px";
                //在位置对象position_list中获取鼠标上一次移动的位置
                var last_item = position_list[position_list.length - 1];
                //只记录每次移动超过5px的位置
                if(Math.abs(left - last_item.x) > 5 || Math.abs(top - last_item.y)){
                    position_list.push({
                        x : left,
                        y : top
                    })
                }
            })
            //鼠标抬起时,改变状态,关闭鼠标拖拽
            ele_box.addEventListener("mouseup",function( evt ){
                flag = false
            })
    
            var timer = null;
            //回放功能,倒叙读取位置对象position_list中的每一个坐标
            ele_replay.addEventListener("click",function(){
                clearInterval(timer)
                timer = setInterval(function(){
                    // 删除数组之中最后一项,每个被删除的项都要单独使用一下;
                    var item = position_list.pop();
                    ele_box.style.left = item.x + "px";
                    ele_box.style.top  = item.y + "px";
                    if(position_list.length === 0){
                            clearInterval(timer);
                        }
                 },20)
            })
           
        </script>
    </body>
    </html>
    View Code

    3、鼠标跟随提示框

    <!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>
            .tip-box{
                position: absolute;
                left: 0;
                top: 0;
                width: 200px;
                height: 100px;
                background: #ddd;
                border: #b6b6b6;
                display: none;
            }
            li{
                margin: 20px;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <ol class="title-list">
                <li>
                    <a href="" title="4399小游戏">4399小游戏</a>  
                    <div class="tip-box">
                        4399小游戏4399小游戏4399小游戏4399小游戏4399小游戏4399小游戏4399小游戏4399小游戏
                    </div>
                </li>
                <li>
                    <a href="">7k7k7k小游戏</a>
                    <!-- 提示框 -->
                    <div class="tip-box">
                        7k7k7k小游戏7k7k7k小游戏7k7k7k小游戏7k7k7k小游戏7k7k7k小游戏7k7k7k小游戏7k7k7k小游戏
                    </div>
                </li>
            </ol>
        </div>
        <script>
            var ele_a = document.querySelectorAll(".title-list a");
            
            for(var i = 0; i < ele_a.length; i++){
                //鼠标移入时触发事件,显示提示框
                ele_a[i].addEventListener("mouseover", function( evt ){
                    var ele_tip = this.nextElementSibling;
                    ele_tip.style.display = "block"
                    var e = evt || event
                    ele_tip.style.left = e.pageX + "px";
                    //提示框和鼠标保持距离
                    ele_tip.style.top = e.pageY + 20 + "px"
                })
                //鼠标移动时,提示框跟着移动
                ele_a[i].addEventListener("mousemove", function( evt ){
                    var ele_tip = this.nextElementSibling;
                    var e = evt || event
                    ele_tip.style.left = e.pageX + "px";
                    ele_tip.style.top = e.pageY + 20 + "px"
                })
                //鼠标移出时,提示框消失
                ele_a[i].addEventListener("mouseout", function( evt ){
                    var ele_tip = this.nextElementSibling;
                    ele_tip.style.display = "none"
                })
            }
        </script>
    </body>
    </html>
    View Code

      以上就是用js实现的一些小案例,后续会更新一些新的小案例 ,希望能对伙伴们有帮助

      同时如果伙伴们有发现什么错误,请大家指点

  • 相关阅读:
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十一)
    install ubuntu on Android mobile phone
    Mac OS, Mac OSX 与Darwin
    About darwin OS
    自然语言交流系统 phxnet团队 创新实训 项目博客 (十)
    Linux下编译安装qemu和libvirt
    libvirt(virsh命令总结)
    深入浅出 kvm qemu libvirt
    自然语言交流系统 phxnet团队 创新实训 项目博客 (九)
    自然语言交流系统 phxnet团队 创新实训 项目博客 (八)
  • 原文地址:https://www.cnblogs.com/mz33/p/12500258.html
Copyright © 2011-2022 走看看