zoukankan      html  css  js  c++  java
  • 登录框的实现方法

    我们在浏览网站的时候经常需要我们登录,才能使用更多的功能. 所以用户对登录的体验就会变得非常重要.目前我们遇到最多的登录方式有两种.一是跳转登录,如天猫,京东,苏宁易购等网站.另一种是在主页弹出登录,如百度 腾讯 爱奇艺等.

    今天我们主要来谈谈第二种登录方式如何用JavaScript实现.

    Html和css样式我们就直接给出来

     

    这个代码包括了登录框的主体box 登录链接login 和蒙版filter.

    首先要获取需要的元素(这里我将所有需要的元素全放在下面):

    var oBox=document.getElementById("box");

        var oHead=document.getElementById("head");

        var oFilter = document.getElementById("filter");

        var oLogin=document.getElementById("login");

        var oX=document.getElementById("x");

       

    点击登录之前,登录框和蒙版都是隐藏的 display="none"

    点击登录显示登录框和蒙版

    oLogin.onclick = function(){

            oBox.style.display = "block";

            oFilter.style.display = "block";

        }

    点击X号 关闭登录框和蒙版

        oX.onclick = function(){

            oBox.style.display = "none";

            oFilter.style.display = "none";

        }

    这样简单的登录和关闭功能就实现了

    登录框都是位于屏幕中心,而不同的网站对登录框的位置处理不同,如腾讯和爱奇艺的登录框是固定在屏幕中心不可移动的

    者通过css就可以实现

    Position:absolute; left:50%; top:50%; margin-top和margin-botto为登录框宽高的一半.

    而百度的登录框的顶部可以拖拽 实现登录框在是屏幕范围内移动动,为了实现这种效果,我们在上面的代码基础上添加下面这部分js代码:

    //点击头部事件 获取鼠标点击距离head部分的坐标

    oHead.onmousedown=function(e){

            var e = e ||event;

            var tisx=e.offsetX;

            var tisy=e.offsetY;

            var h=document.documentElement.clientHeight - oBox.offsetHeight

            var w=document.documentElement.clientWidth - oBox.offsetWidth

    //鼠标拖动事件 获取鼠标在可视区的坐标  与鼠标相对head部分的坐标之差 就是box相对于body的left和top距离        实现点击head部分而使head的父级box整体移动

    document.onmousemove=function(e){

                e = e || event;

                //由于我们在css中加入margin值来调整登陆框位置 这会影响我们鼠标移动事件中计算left和top的值 所以要将margin值清零 或 在计算过程中加上margin值移动的偏差.

                oBox.style.margin = '0'

                oBox.style.left= e.clientX-tisx+"px";

                oBox.style.top = e.clientY-tisy+"px";

                //我们获取top和 left值 判断是否超出了屏幕的可视区  将登陆框的移动范围限定在屏幕可视区中

    if(oBox.offsetTop>h){

                    oBox.style.top =h+"px";

                }

                if(oBox.offsetTop<0){

                    oBox.style.top =0+"px";

                }

               

                if(oBox.offsetLeft>(w)){

                    oBox.style.left=w+"px";

                }

                if(oBox.offsetLeft<0){

                    oBox.style.left=0+"px";

                }  

            }  

    或者我们将上面的冗余的判断用三目运算符来解决:

                //先单纯计算出left和top需要移动的值

    var l = e.clientX-disX

                var t = e.clientY-disY

                //同样的要清零margin

                oBox.style.margin = "0";

                //三目运算部分  

                l=l>w?w:(l<0?0:l);

                t=t>h?h:(t<0?0:t);

                //在这里将box应移动的距离:left和top的值赋给box

                oBox.style.left = l +"px"

                oBox.style.top = t+ "px"

    效果图如下

     

    但可拖拽的方式会容易出现一些bug ,如百度登录页面就会出现这个问题,如图

     

    当我们将登录框移动到右下时 会出现上下和左右滚动条

  • 相关阅读:
    页面状态加载.... JS
    创建windows服务&监控SQL数据运行状态(原)
    为图片添加锚点
    当jquery遇上了json 哇哈哈
    关于SVN源代码管理
    最新最全的ASP.NET学习资源大全
    .NET开发人员必知的八个网站
    关于回车执行(回车触发事件)
    DIV+CSS布局
    优化Linux下的内核TCP参数来提高服务器负载能力
  • 原文地址:https://www.cnblogs.com/lord-Roland/p/9067715.html
Copyright © 2011-2022 走看看