zoukankan      html  css  js  c++  java
  • 原生js+css实现重力模拟弹跳系统的登录页面

       今天小颖把之前保存的js特效视频看了一遍,跟着视频敲了敲嘻嘻,用原生js实现一个炫酷的登录页面。怎么个炫酷法呢,看看下面的图片大家就知道啦。

    效果图:

    不过在看代码之前呢,大家先和小颖看看css中的opacity、transition、box-shadow这三个属性。

    1.opacity

    作用:设置一个元素的透明度

    定义和用法

    opacity 属性设置元素的不透明级别。

    默认值: 1
    继承性: no
    版本: CSS3
    JavaScript 语法: object.style.opacity=0.5

    语法

    opacity: value|inherit;
    描述测试
    value 规定不透明度。从 0.0 (完全透明)到 1.0(完全不透明)。 测试
    inherit 应该从父元素继承 opacity 属性的值。  

    亲自试一试 - 实例

    2.transition

    作用:将元素从一种样式逐渐改变为另一种的效果。

    定义和用法

    transition 属性是一个简写属性,用于设置四个过渡属性:

    • transition-property
    • transition-duration
    • transition-timing-function
    • transition-delay

    注释:请始终设置 transition-duration 属性,否则时长为 0,就不会产生过渡效果。

    默认值: all 0 ease 0
    继承性: no
    版本: CSS3
    JavaScript 语法: object.style.transition="width 2s"

    语法

    transition: property duration timing-function delay;
    描述
    transition-property 规定设置过渡效果的 CSS 属性的名称。
    transition-duration 规定完成过渡效果需要多少秒或毫秒。
    transition-timing-function 规定速度效果的速度曲线。
    transition-delay 定义过渡效果何时开始。

    亲自试一试 - 实例

    3.box-shadow

    作用:给元素添加阴影效果。

    定义和用法

    box-shadow 属性向框添加一个或多个阴影。

    提示:请使用 border-image-* 属性来构造漂亮的可伸缩按钮!

    默认值: none
    继承性: no
    版本: CSS3
    JavaScript 语法: object.style.boxShadow="10px 10px 5px #888888"

    语法

    box-shadow: h-shadow v-shadow blur spread color inset;

    注释:box-shadow 向框添加一个或多个阴影。该属性是由逗号分隔的阴影列表,每个阴影由 2-4 个长度值、可选的颜色值以及可选的 inset 关键词来规定。省略长度的值是 0。

    描述测试
    h-shadow 必需。水平阴影的位置。允许负值。 测试
    v-shadow 必需。垂直阴影的位置。允许负值。 测试
    blur 可选。模糊距离。 测试
    spread 可选。阴影的尺寸。 测试
    color 可选。阴影的颜色。请参阅 CSS 颜色值。 测试
    inset 可选。将外部阴影 (outset) 改为内部阴影。 测试

    亲自试一试 - 实例

    怎么实现的呢,哈哈哈,代码看这里:

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8">
        <title>梦幻登录</title>
        <style type="text/css">
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
    
        body {
            overflow: hidden;
        }
    
        #bg_wrap {
             100%;
            height: 100%;
            position: absolute;
            left: 0;
            top: 0;
            overflow: hidden;
        }
    
        #bg_wrap div {
             100%;
            height: 100%;
            position: absolute;
            left: 0;
            top: 0;
            opacity: 0;
            /* 设置透明度 */
            transition: opacity 3s;
        }
        /* nth-of-type(1) *筛选选择器选择第一个*/
    
        #bg_wrap div:nth-of-type(1) {
            opacity: 1;
        }
    
        #Login {
             272px;
            height: 300px;
            margin: 200px auto;
        }
    
        #Login .move {
            position: absolute;
            top: -100px;
            z-index: 999;
        }
    
        #Login h3 {
             270px;
            font-size: 30px;
            font-weight: 700;
            color: #fff;
            font-family: '微软雅黑';
            text-align: center;
            margin-bottom: 30px;
            cursor: move;
            /* top: 100px; */
        }
        /*  #username {
            top: 170px;
        }
    
        #password {
            top: 225px;
        } */
    
        #Login input.text {
             270px;
            height: 42px;
            color: #fff;
            background: rgba(45, 45, 45, 0.15);
            border-radius: 6px;
            border: 1px solid rgba(255, 255, 255, 0.15);
            box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 1.0) inset;
            text-indent: 10px;
        }
    
        #Login input.btn {
            /* top: 280px; */
            background: #ef4300;
             272px;
            height: 44px;
            border-radius: 6px;
            color: #fff;
            box-shadow: 0 15px 30px 0 rgba(255, 255, 255, 0.25) inset, 0 2px 7px 0 rgba(0, 0, 0, 0.2);
            /* -webkit-box-shadow: 0 15px 30px 0 rgba(255, 255, 255, 0.25) inset, 0 2px 7px 0 rgba(0, 0, 0, 0.2);
            -moz-box-shadow: 0 15px 30px 0 rgba(255, 255, 255, 0.25) inset, 0 2px 7px 0 rgba(0, 0, 0, 0.2); */
            border: 0;
            text-align: center;
        }
        /* #Login input.focus {
            outline: none;
            box-shadow: 0 2px 3px 0 rgba(0, 0, 0, 0.2) inset;
        } */
    
        input::-webkit-input-placeholder {
            color: #fff;
        }
        </style>
    </head>
    
    <body>
        <div id="bg_wrap">
            <div><img src="images/1.jpg" width="100%" height="100%"></div>
            <div><img src="images/2.jpg" width="100%" height="100%"></div>
            <div><img src="images/3.jpg" width="100%" height="100%"></div>
        </div>
        <div id="Login">
            <h3 id="title" class="move">User Login</h3>
            <form action="#" method="post" target="_blank">
                <input type="text" placeholder="UserName" name="username" id="username" class="text move">
                <input type="password" placeholder="PassWord" name="password" id="password" class="text move">
                <input type="submit" value="Sign in" class="btn move" id="submit">
            </form>
        </div>
        <script type="text/javascript">
        /*背景渐变*/
        /*function(){}   匿名函数
          ()()           IIFE匿名函数立刻执行,函数自执行体*/
        (function() {
            var timer = null; //声明定时器
            var oImg = document.querySelectorAll('#bg_wrap div') //h5最新元素获取写法获取到的是一组元素
            //querySelector获取单个元素的   兼容ie8
            var len = oImg.length; //3
            var index = 0;
            timer = setInterval(function() {
                oImg[index].style.opacity = 0;
                index++;
                // if(index>=3){
                // 	index=0;
                // }
                index %= len; //index=index%len求模取余 0%3=0; 1%3=1; 2%3=2; 3%3=0;
                oImg[index].style.opacity = 1;
            }, 2000);
        })();
        // 重力模拟弹跳系统
        (function() {
            /*
            改变定位元素的top值
            达到指定位置之后进行弹跳一次
            多个元素一次运动
            动画序列*/
            var oMove = document.querySelectorAll('.move');
            var oLen = oMove.length;
            var timer = null;
            var timeout = null;
            var speed = 3; //移动距离
            move(oLen - 1);
    
            function move(index) {
                if (index < 0) {
                    clearInterval(timer); //清除循环定时器
                    clearTimeout(timeout); //清除延时定时器
                    return; //终止函数
                }
                var endTop = 150 + (index * 60); //根据下标计算endTop值
                timer = setInterval(function() {
                    speed += 3;
                    var T = oMove[index].offsetTop + speed; //设置每一次的top值
                    if (T > endTop) {
                        T = endTop;
                        speed *= -1 //取反,让移动距离变为负数
                        speed *= 0.4;
                        //慢慢停下来
                    }
                    oMove[index].style.top = T + 'px';
                }, 20);
                timeout = setTimeout(function() {
                    clearInterval(timer);
                    index--;
                    console.log(9);
                    move(index);
                    console.log(index);
                }, 900) //过900毫秒之后再执行方法里的代码
            }
        })()
        </script>
    </body>
    
    </html>
    

     git地址

  • 相关阅读:
    We7很给力
    用Windows Media Player截图的方法
    控制IMG图片的大小缩放
    ASP.NET 2.0轻松搞定统计图表(二)
    VS2010中,无法嵌入互操作类型“……”,请改用适用的接口的解决方法
    db2表名大小写问题
    来自Rails世界的项目管理工具Redmine
    Downloading C# ActiveX Components through CAB File(转)
    windows下借助InstantRails环境搭建redmine(转)
    JavaScript获取系统当前日期和时间、星期几
  • 原文地址:https://www.cnblogs.com/yingzi1028/p/7763450.html
Copyright © 2011-2022 走看看