整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

用extjs写一个登录界面

上效果图:

这是一个用ext3.2.0、js、html、css写的一个还算好看的登录界面。

源代码已上传,下载地址请点击:点击打开链接

其主要难点在如何使用extjs来画一个界面,接下来我们就主要看一下其中的html和js吧:


  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>登录界面</title>
  6. <link rel="stylesheet" type="text/css" href="ext3.2.0/resources/css/ext-all.css"/>
  7. <script type="text/javascript" src="ext3.2.0/adapter/ext/ext-base.js"></script>
  8. <script type="text/javascript" src="ext3.2.0/ext-all.js"></script>
  9. <script type="text/javascript" src="login.js"></script>
  10. <script type="text/javascript" src="loginToDo.js"></script>
  11. <link rel="stylesheet" type="text/css" href="login.css"/>
  12. </head>
  13. <body onkeydown="keyLogin(event);">
  14. </body>
  15. </html>

这里面主要是导入页面所需的js和css文件,当然还有一个亮点就是body标签上的 onkeydown事件属性,主要用于监听键盘实现我们js中的enter键提交功能。然后看一下extjs的语言风格吧:


  1. Ext.onReady(function () {
  2. // 创建“登录”面板
  3. var loginPanel = new Ext.Panel({
  4. // 设置面板的位置、宽高、样式
  5. // 注意:此处我用的是相对布局relative(用于比较两者的区别)
  6. id: 'loginPan',
  7. x: 363,
  8. y: 0,
  9. width: 396,
  10. height: 480,
  11. baseCls: '',
  12. defaults: {
  13. border: false
  14. },
  15. // 添加面板里面的物品
  16. items: [
  17. {
  18. // 第一件:logo图
  19. id: 'loginLogo',
  20. height: 160,
  21. frame: false,
  22. bodyStyle: 'padding-top:10px',
  23. html: '<img src="images/fly_icon.png">'
  24. },
  25. {
  26. // 第二件:登录的表单
  27. id: 'loginForm',
  28. defaultType: 'textfield',
  29. frame: false,
  30. defaults: {
  31. allowBlank: false
  32. },
  33. // 添加表单里面的物品:两个输入框
  34. items: [
  35. {
  36. id: "username",
  37. cls: "text_field",
  38. inoutType: 'text',
  39. width: 330,
  40. height: 28,
  41. blankText: '账号不能为空',
  42. emptyText: '请输入账号',
  43. },
  44. {
  45. id: "password",
  46. cls: "text_field",
  47. inputType: 'password',
  48. width: 330,
  49. height: 28,
  50. emptyText: '请输入密码',
  51. blankText: '密码不能为空',
  52. }]
  53. },
  54. {
  55. // 第三件:忘记密码
  56. id: 'loginForget',
  57. html: "<a href='forget_pwd.html' target='_blank'>忘记密码?</a>",
  58. },
  59. {
  60. // 第四件:登录按钮
  61. id: 'loginBtn',
  62. html: '<button id="btn_login">马上登录</button>',
  63. }
  64. ],
  65. });
  66. // 创建“注册”面板
  67. var registerPanel = new Ext.Panel({
  68. // 设置面板的位置、宽高、样式
  69. // 注意:此处我用的是绝对布局absolute(用于比较两者的区别)
  70. id: 'registerPan',
  71. x: 0,
  72. y: 46,
  73. width: 800,
  74. height: 389,
  75. baseCls: '',
  76. layout: 'absolute',
  77. defaults: {
  78. border: false
  79. },
  80. // 添加面板里面的物品
  81. items: [
  82. {
  83. // 第一件:标题
  84. id: 'registerTitleLabel',
  85. xtype: 'label',
  86. x: 47,
  87. y: 50,
  88. text: '还没有账号?',
  89. }, {
  90. // 第二件:正文
  91. id: 'registerContentLabel',
  92. xtype: 'label',
  93. x: 47,
  94. y: 135,
  95. text: '这是在注册面板下面的正文内容。里面的内容可以随便写,比如当前我们再一个窗口下面建立了两个面板。而两个面板的布局是分别用相对布局和绝对布局来实现的。相比较而言,我觉得用绝对布局会简单粗暴,更直接,更方便。总之,你们自己体会一下吧。',
  96. }, {
  97. // 第三件:注册按钮
  98. id: 'registerBtn',
  99. xtype: 'button',
  100. x: 47,
  101. y: 280,
  102. html: '<button id="btn_register" >马上注册</button>'
  103. }],
  104. });
  105. // 创建窗口,从而让内容达到居中效果
  106. var centerWindow = new Ext.Window({
  107. baseCls: '',
  108. width: 800,
  109. height: 480,
  110. layout: 'absolute',
  111. closable: false,
  112. draggable: false,
  113. resizable: false,
  114. shadow: false,
  115. border: false,
  116. items: [registerPanel, loginPanel],
  117. });
  118. // 显示窗口
  119. centerWindow.show();
  120. // 添加浏览器缩放自动居中效果
  121. Ext.EventManager.onWindowResize(function () {
  122. centerWindow.center();
  123. });
  124. });

这里要说的是:1、注意给属性加标记,能用id就用id,cls只是一个封装过的class,和原生的class还是有区别的,比如给一个cls元素的height、padding定义样式并不起作用。详见:关于extjs中的cls ≠ class

2、在ext中建议用绝对定位,由于它底层是一个个的table、div块,如果用相对定位的话偶尔是有偏差的,所以还是绝对定位方便直接啊。

3、window自带居中效果,可以利用这一点让元素在屏幕中居中。但是当浏览器缩放的时候,这个window并不会动,每次都需要重新刷新一下才会改变一下。所以,在以上代码的最后我们用给这个centerWindow添加了一个窗口自适应居中的效果。

在网页中将 HTML 元素水平居中,可以使用 CSS 中的 margin: 0 auto; 属性。以下是一种常用的实现方法:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Horizontal Centering</title>

<style>

.center {

width: 300px; /* 设置元素宽度 */

margin: 0 auto; /* 水平居中 */

background-color: lightblue;

padding: 20px;

}

</style>

</head>

<body>

<div class="center">

<p>This element is horizontally centered.</p>

</div>

</body>

</html>

在上面的示例中, center 类的元素使用了 width: 300px; 来设置宽度,然后通过 margin: 0 auto; 来实现水平居中。这样,无论屏幕宽度如何变化,元素都会始终水平居中显示。

您也可以将此样式应用到任何 HTML 元素(例如 div 、 span 、 p 等),以实现水平居中效果。

.水平居中的 margin:0 auto;

关于这个,大家也不陌生做网页让其居中用的比较多, 这个是用于子元素上的,前提是不受float影响

<style>
    *{
        padding: 0;
        margin: 0;
    }
        .box{
            width: 300px;
            height: 300px;
            border: 3px solid red;
            /*text-align: center;*/
        }
        img{
            display: block;
            width: 100px;
            height: 100px;
            margin: 0 auto;
        }
    </style>

<!--html-->
<body>
    <div class="box">
        ![](img1.jpg)
    </div>
</body>

我自己是一名从事了多年开发的web前端老程序员,目前辞职在做自己的web前端私人定制课程,去年我花了一个月整理了一份最适合2019年学习的web前端学习干货,各种框架都有整理,送给每一位前端小伙伴,想要获取的可以关注我的头条号并在后台私信我:前端,即可免费获取。

2.水平居中 text-align:center;

img的display:inline-block;类似一样在不受float影响下进行 实在父元素上添加效果让它进行水平居中

<style>
    *{
        padding: 0;
        margin: 0;
    }
        .box{
            width: 300px;
            height: 300px;
            border: 3px solid red;
            text-align: center;
        }
        img{
            display: inline-block;
            width: 100px;
            height: 100px;
            /*margin: 0 auto;*/
        }
    </style>

<!--html-->
<body>
    <div class="box">
        ![](img1.jpg)
    </div>
</body>

3.水平垂直居中(一)定位和需要定位的元素的margin减去宽高的一半
这种方法的局限性在于需要知道需要垂直居中的宽高才能实现,经常使用这种方法

    <style>
        *{
            padding: 0;
            margin: 0;
        }
        .box{
            width: 300px;
            height: 300px;
            background:#e9dfc7; 
            border:1px solid red;
            position: relative;
        }
        img{
            width: 100px;
            height: 150px;
            position: absolute;
            top: 50%;
            left: 50%;
            margin-top: -75px;
            margin-left: -50px;
        }
    </style>
<!--html -->
<body>
    <div class="box" >
        ![](2.jpg)
    </div>
</body>

4.水平垂直居中(二)定位和margin:auto;
这个方法也很实用,不用受到宽高的限制,也很好用

    <style>
        *{
            padding: 0;
            margin: 0;
        }
        .box{
            width: 300px;
            height: 300px;
            background:#e9dfc7; 
            border:1px solid red;
            position: relative;

        }
        img{
            width: 100px;
            height: 100px;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            margin: auto;
        }
    </style>
<!--html -->
<body>
    <div class="box" >
        ![](3.jpg)
    </div>
</body>

5.水平垂直居中(三)绝对定位和transfrom
这个方法比较高级了,用到了形变,据我所知很多大神喜欢使用这个方法进行定位,逼格很高的,学会后面试一定要用!这个是不需要知道居中元素的宽高就可以使用的,代码里的图片稍微有点大,改改宽高,仅此而已,在面试中大部分人会问如果不知道宽高该如何居中,答这个,加分!对transform不了解的同学可以查阅一下资料了解一下!

<style>
    *{
        padding: 0;
        margin: 0;
    }
    .box{
        width: 300px;
        height: 300px;
        background:#e9dfc7; 
        border:1px solid red;
        position: relative;

    }
    img{
        width: 100px;
        height: 100px;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%,-50%);
    }
</style>
<!--html -->
<body>
    <div class="box" >
        ![](4.jpg)
    </div>
</body>

6.水平垂直居中(四)diplay:table-cell

其实这个就是把其变成表格样式,再利用表格的样式来进行居中,很方便

<style>
    .box{
            width: 300px;
            height: 300px;
            background:#e9dfc7; 
            border:1px solid red;
            display: table-cell;
            vertical-align: middle;
            text-align: center;
        }
        img{
            width: 100px;
            height: 150px;
            /*margin: 0 auto;*/  这个也行
        }
</style>
<!--html -->
<body>
    <div class="box" >
        ![](5.jpg)
    </div>
</body>


7.水平垂直居中(五)flexBox居中

这个用了C3新特性flex,非常方便快捷,在移动端使用完美,pc端有兼容性问题,以后会成为主流的

<style>
    .box{
            width: 300px;
            height: 300px;
            background:#e9dfc7; 
            border:1px solid red;
            display: flex;
            justify-content: center;
            align-items:center;
        }
        img{
            width: 150px;
            height: 100px;
        }
</style>
<!--html -->
<body>
    <div class="box" >
        ![](6.jpg)
    </div>
</body>

8.水平垂直居中(六)利用vertical-align:middle;
这方法不常见,但是一位朋友补充后我觉得也不失为一种好方法可以让别人刮目相看,这个方法关键要有一个和容器一样高的元素作为居中的一个参照就像b元素一样

<style>
    .wrap{
            width:300px;
            height:300px; 
            background:rgba(0,0,0,0.5);
            text-align:center;
            font-size:0;
            }
    .vamb{
        display:inline-block; 
        width:0px;
        height:100%;
        vertical-align:middle;
        }
    .test{
        display:inline-block;
        vertical-align:middle;
        font-size:16px;
        text-align:left;
        background:red;
        }
</style>
<body>
    <div class="wrap">
        <b class="vamb"></b>
        <div class="test">
        宽高不定<br>
        垂直水平居中
        </div>
    </div>
</body>

常见又实用的例子就先写到这,欢迎提意见,谢谢大家!喜欢请关注点个赞,也是对我的支持和鼓励!



作者:coderLfy链接:https://www.jianshu.com/p/a7552ce07c88