zoukankan      html  css  js  c++  java
  • div弹出层的ajax登录(Jquery版)

    今天别人都在休息,还要上班,自我安慰一下,他人笑我没长假,我笑他人没事干!

    本人不善于jquery,也不善于div+css的排版,今天把vs2008打了个补丁,然后摸索了2个多小时做完这个例子和博客,手都敲软了,在这里和大家分享学习下!

    div弹出层,我没有点击事件,是页面一加载就弹出来,你也可以改成$("#id").click(function(){});放这里面就可以点击某个id事件来弹出层了,上预览图:

    页面加载完成时:

    当验证码得到焦点时:

    实现这个ajax为了节约时间,用户名/密码/验证码我都没判断是否为空,我也没用数据库,登录用户名和密码都是admin

    登录成功时:

    这里说明一下,由于时间有限,你可以把这个登录成功或者登录失败,效果做一下,直接在登录窗口上放一个<div id="message"><div>然后设置其样式,把提示内容追加上去,根据自己个人需求来,下面贴我的全部代码:

    静态页面login.html代码如下图所示:

    login.html
     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2 <html xmlns="http://www.w3.org/1999/xhtml">
    3 <head>
    4 <title>mydream_后台登录</title>
    5 <link href="css/login.css" rel="stylesheet" type="text/css" />
    6 <script src="../js/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>
    7 <script src="js/login.js" type="text/javascript"></script>
    8 </head>
    9 <body>
    10 <div id="login" class="login">
    11 <div class="title"><b>管理员登录</b></div>
    12 <div class="pad">
    13 <div><p class="selectinput loginpsw"><label>用户名:</label><input type="text" tabindex="1" class="txt" size="36" name="username" id="txtName" /></p></div>
    14 <div><p class="selectinput loginpsw"><label>&nbsp;&nbsp;&nbsp;码:</label><input type="password" tabindex="1" class="txt" size="36" name="password" id="txtPassword" /></p></div>
    15 <div><div><p class="selectinput loginpsw"><label>验证码:</label><input type="text" tabindex="1" class="txt" size="36" name="code" id="txtCode"/></p></div></div>
    16 <div><input id="btnLogin" type="button" value="登 录" /></div>
    17 </div>
    18 <div class="divCode"><img alt="验证码" title="点击刷新验证码" src="../ashx/verifyCode.ashx" /></div>
    19 </div>
    20 </body>
    21 </html>

    login.html层叠样式表login.css代码如下所示:

    login.css
     1 .selectinput{margin-bottom:10px;width:224px;height:20px;background-color:#FFF;border:1px solid;border-color:#999 #CCC #CCC #999;}
    2 .selectinput .txt{float:left;width:165px;border:none;}
    3 .loginpsw label{float:left;display:inline;margin:0 0 0 4px;width:50px;height:auto;line-height:150%; color:#339900}
    4 body,td,input,textarea,select,button{color:#666;font:12px/1.6em Verdana,Helvetica,Arial,sans-serif;}
    5 input,select,button{vertical-align:middle;}
    6 .txt,.txtarea{padding:2px;*padding:0 2px;height:16px;*height:20px;border:1px solid;border-color:#999 #CCC #CCC #999;background:#FFF;}
    7 body{ margin:0 auto;}
    8 .login{border:solid 3px #339900; width:360px; height:223px;display:none; z-index:101;position:absolute; background-color:#FFFFFF;}
    9 .login .title{width:100%;height:30px;line-height:30px; border-bottom:solid 1px #339900;}
    10 .login .title b{ padding-left:5px; color:#000000;}
    11 .login .pad{padding-left:35px;}
    12 .login .divCode{width:80px; height:30px;position:relative;top: -32px;left:170px; display:none;}
    13 .login #btnLogin{width:55px; height:28px;}
    14 #greybackground{background:#000000;width:100%; display:block; z-index:100; top:0px; left:0px; position:absolute;}

    login.html页面所需js文件login.js代码如下所示:

    login.js
     1 /// <reference path="http://www.cnblogs.com/js/jquery-1.4.1-vsdoc.js" />
    2 $(document).ready(function() {
    3 var screenwidth, screenheight, mytop, getPosLeft, getPosTop
    4 screenwidth = $(window).width();
    5 screenheight = $(window).height();
    6 //获取滚动条距顶部的偏移
    7 mytop = $(document).scrollTop();
    8 //计算弹出层的left
    9 getPosLeft = screenwidth / 2 - 200;
    10 //计算弹出层的top
    11 getPosTop = screenheight / 2 - 150;
    12 //css定位弹出层
    13 $("#login").css({ "left": getPosLeft, "top": getPosTop });
    14 //当浏览器窗口大小改变时
    15 $(window).resize(function() {
    16 screenwidth = $(window).width();
    17 screenheight = $(window).height();
    18 mytop = $(document).scrollTop();
    19 getPosLeft = screenwidth / 2 - 200;
    20 getPosTop = screenheight / 2 - 150;
    21 $("#login").css({ "left": getPosLeft, "top": getPosTop + mytop });
    22 });
    23 //当拉动滚动条时,弹出层跟着移动
    24 $(window).scroll(function() {
    25 screenwidth = $(window).width();
    26 screenheight = $(window).height();
    27 mytop = $(document).scrollTop();
    28 getPosLeft = screenwidth / 2 - 200;
    29 getPosTop = screenheight / 2 - 150;
    30 $("#login").css({ "left": getPosLeft, "top": getPosTop + mytop });
    31 });
    32 //失去焦点与得到焦点
    33 $("#txtCode").focus(function() {
    34 $(".divCode").fadeIn(1200);
    35 });
    36 $("#txtCode").blur(function() {
    37 $(".divCode").fadeOut();
    38 });
    39 $("#login").fadeIn("slow"); //toggle("slow");
    40 //获取页面文档的高度
    41 var docheight = $(document).height();
    42 //追加一个层,使背景变灰
    43 $("body").append("<div id='greybackground'></div>");
    44 $("#greybackground").css({ "opacity": "0.1", "height": docheight });
    45 //登录
    46 $("#btnLogin").click(function() {
    47 $.get("../ashx/login.ashx",
    48 { name: $("#txtName").val(),
    49 pwd: encodeURIComponent($("#txtPassword").val()),
    50 code: $("#txtCode").val()
    51 },
    52 function(data) {
    53 switch (data) {
    54 case "code error":
    55 alert("验证码错误!");
    56 break;
    57 case "success":
    58 alert("登录成功!");
    59 break;
    60 case "false":
    61 alert("登录失败!");
    62 break;
    63 default:
    64 alert("数据加载失败,请稍后再试!");
    65 break;
    66 }
    67 });
    68 });
    69 });

    login.html交互的后台cs文件login.ashx代码如下所示:

    login.ashx
     1 <%@ WebHandler Language="C#" Class="login" %>
    2
    3 using System;
    4 using System.Web;
    5 using System.Web.SessionState;
    6
    7 public class login : IHttpHandler, IRequiresSessionState
    8 {
    9 public void ProcessRequest(HttpContext context)
    10 {
    11 string code = context.Request.QueryString["code"];
    12 context.Response.ContentType = "text/plain";
    13 if (code.ToLower() != context.Session["checkCode"].ToString())
    14 {
    15 context.Response.Write("code error");
    16 }
    17 else
    18 {
    19 string name = context.Request.QueryString["name"];
    20 string pwd = HttpUtility.UrlDecode(context.Request.QueryString["pwd"]);
    21 if (name == "admin" && pwd == "admin")
    22 {
    23 context.Response.Write("success");
    24 }
    25 else
    26 {
    27 context.Response.Write("false");
    28 }
    29 }
    30 }
    31
    32 public bool IsReusable
    33 {
    34 get
    35 {
    36 return false;
    37 }
    38 }
    39
    40 }

    login.html页面验证码文件verifyCode.ashx代码如下所示:

    verifyCode
     1 <%@ WebHandler Language="C#" Class="verifyCode" %>
    2
    3 using System;
    4 using System.Web;
    5 using System.Web.SessionState;//第一步导入命名空间
    6 using System.Drawing;
    7
    8 public class VerifyCode : IHttpHandler, IRequiresSessionState
    9 {//第二步实现接口 就和平常一样可以使用session
    10
    11 public void ProcessRequest(HttpContext context)
    12 {
    13 string checkCode = this.CreateRandomCode(4).ToLower();
    14 context.Session["checkCode"] = checkCode;
    15 this.CreateImage(context, checkCode);
    16 }
    17
    18 public bool IsReusable
    19 {
    20 get
    21 {
    22 return false;
    23 }
    24 }
    25
    26 /// <summary>
    27 /// 按位生成随机
    28 /// </summary>
    29 /// <param name="codeCount"></param>
    30 /// <returns></returns>
    31 private string CreateRandomCode(int codeCount)
    32 {
    33 int number;
    34 string checkCode = String.Empty;
    35 Random random = new Random();
    36 for (int i = 0; i < codeCount; i++)
    37 {
    38 number = random.Next(100);
    39 switch (number % 3)
    40 {
    41 case 0:
    42 checkCode += ((char)('0' + (char)(number % 10))).ToString();
    43 break;
    44 case 1:
    45 checkCode += ((char)('a' + (char)(number % 26))).ToString();
    46 break;
    47 case 2:
    48 checkCode += ((char)('A' + (char)(number % 26))).ToString();
    49 break;
    50 default:
    51 break;
    52 }
    53 }
    54 return checkCode;
    55 }
    56
    57 /// <summary>
    58 /// 根据字符生成图片
    59 /// </summary>
    60 /// <param name="context"></param>
    61 /// <param name="checkCode"></param>
    62 private void CreateImage(HttpContext context,string checkCode)
    63 {
    64 int randAngle = 45;//随机转动角度
    65 int iwidth = (int)(checkCode.Length * 23);
    66 //封装GDI+ 位图,此位图由图形图像及其属性的像素数据组成,指定的宽度和高度。以像素为单位
    67 System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 28);
    68
    69 //封装一个 GDI+绘图图面。无法继承此类。从指定的Image创建新的 Graphics
    70 Graphics g = Graphics.FromImage(image);
    71
    72 //清除整个绘图面并以指定背景填充
    73 g.Clear(Color.AliceBlue);
    74
    75 //画一个边框
    76 g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1);
    77
    78 //定义绘制直线和曲线的对象。(只是Pen的颜色,指示此Pen的宽度的值)
    79 Pen blackPen = new Pen(Color.LightGray, 0);
    80
    81 Random rand = new Random();
    82
    83 //划横线的条数 可以根据自己的要求
    84
    85 for (int i = 0; i < 50; i++)
    86 {
    87 //随机高度
    88 //int y = rand.Next(image.Height);
    89 /*绘制一条连线由坐标对指定的两个点的线条
    90 线条颜色、宽度和样式,第一个点的x坐标和y坐标,第二个点的x坐标和y坐标*/
    91 //g.DrawLine(blackPen, 0, y, image.Width, y);
    92 int x = rand.Next(0, image.Width);
    93 int y = rand.Next(0, image.Height);
    94 //画矩形,坐标(x,y)宽高(1,1)
    95 g.DrawRectangle(blackPen, x, y, 1, 1);
    96 }
    97
    98 //拆散字符串成单个字符数组
    99 char[] chars = checkCode.ToCharArray();
    100
    101 //文字居中
    102 StringFormat format = new StringFormat(StringFormatFlags.NoClip);
    103 format.Alignment = StringAlignment.Center;
    104 format.LineAlignment = StringAlignment.Center;
    105
    106 //定义颜色
    107 Color[] c = { Color.Black, Color.DarkGray, Color.DarkOrange, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
    108 //定义字体
    109 string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体", "Arial Baltic" };
    110
    111 for (int i = 0; i < chars.Length; i++)
    112 {
    113 int cindex = rand.Next(c.Length);
    114 int findex = rand.Next(font.Length);
    115
    116 //font 封装在特定设备上呈现特定字体所需的纹理和资源(字体,大小,字体样式)
    117 Font f = new System.Drawing.Font(font[findex], 16, System.Drawing.FontStyle.Bold);
    118
    119 /*Brush定义用于填充图形图像(如矩形、椭圆、圆形、多边形和封闭路径)的内部对象
    120 SolidBrush(Color.White)初始化指定的颜色 指定画笔颜色为白色*/
    121 Brush b = new System.Drawing.SolidBrush(c[cindex]);
    122
    123 Point dot = new Point(16, 16);
    124
    125 //转动的度数
    126 float angle = rand.Next(-randAngle, randAngle);
    127
    128 //移动光标到指定位置
    129 g.TranslateTransform(dot.X, dot.Y);
    130 g.RotateTransform(angle);
    131 /*在指定的位置并且用指定的Brush和Font对象绘制指定的文本字符串
    132 (指定的字符串,字符串的文本格式,绘制文本颜色和纹理,所绘制文本的左上角的x坐标,坐标)*/
    133 g.DrawString(chars[i].ToString(), f, b, 1, 1, format);
    134 //转回去
    135 g.RotateTransform(-angle);
    136 //移动光标指定位置
    137 g.TranslateTransform(2, -dot.Y);
    138 }
    139 //创建存储区为内存流
    140 System.IO.MemoryStream ms = new System.IO.MemoryStream();
    141
    142 //将此图像以指定的格式保存到指定的流中(将其保存在内存流中,图像的格式)
    143 image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    144
    145 //清除缓冲区将流中的内容输出
    146 context.Response.ClearContent();
    147
    148 //获取输出流的类型
    149 context.Response.ContentType = "image/Jpeg";
    150
    151 //将二进制字符串写入HTTP输出流
    152 context.Response.BinaryWrite(ms.ToArray());
    153
    154 g.Dispose();
    155
    156 image.Dispose();
    157 }
    158 }

    有了以上文件,就可以做你想要的谈出div层效果了,我js不是很擅长,有好的意见欢迎拍砖,不要喷,谢谢!

    下载地址,点击这里

    版权所有,转载请注明出处!

    一切伟大的行动和思想,都有一个微不足道的开始。微不足道的我,正在吸取知识的土壤,希望能取得成功!不嫌弃我微不足道的,愿交天下好友!

  • 相关阅读:
    hdu 3714
    sql 函数 DATEADD 使用
    mvc的IIS 配置问题 runAllManagedModulesForAllRequests 与 HtmlFileHandler
    移动端日历控件 mobiscroll 的简单使用、参数设置
    sql中判断是否存在某个对象
    SQLServer中的变量:局部变量,全局变量
    键盘对照表
    [PyQt]在Windows系统中安装Eric6
    [Python]使用QRCode生成彩色二维码
    [PyQt]PyQt5连接SQL Server数据库,并读取所有数据库名称
  • 原文地址:https://www.cnblogs.com/cmsdn/p/2198598.html
Copyright © 2011-2022 走看看