require.js+bootstrap實現簡單的頁面登陸和頁面跳轉

      小穎的這個demo其實很簡單的,你們一塊兒來先來看看頁面效果圖:          javascript

目錄:

                           

代碼:

inde.htmlcss

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>require.js小demo</title>
    <link rel="stylesheet" href="css/bootstrap.css">
    <link rel="stylesheet" href="css/base.css">
    <!-- 加載require.js文件,也可能形成網頁失去響應。解決辦法有兩個,一個是把它放在網頁底部加載,另外一個是寫成下面這樣: -->
    <!-- <script src="js/require.js" defer async="true" ></script> -->
    <!--async屬性代表這個文件須要異步加載,避免網頁失去響應。IE不支持這個屬性,只支持defer,因此把defer也寫上。  -->
    <!-- 加載require.js之後,下一步就要加載咱們本身的代碼了。假定咱們本身的代碼文件是main.js,也放在js目錄下面。只須要寫成下面這樣就好了: -->
    <!-- <script src="js/require.js" data-main="src/main.js"></script> -->
    <script type="text/javascript" data-main="js/app" src="js/lib/require.js"></script>
</head>

<body>
    <div class="view-container"></div>
</body>

</html>

js下的文件:

app.jshtml

requirejs.config({
    baseUrl: 'js/lib',
    paths: {
        jquery: 'jquery',
        app: '../app'
    }
});
require(['app/main'], function() {
});

js/app下的文件:

main.jsjava

define(['jquery'], function($) {
    $(function() {
        if(location.hash =="#login"){
            loads(hashToPath('login'));
        }else{
            location.hash = "#login";
        }
        loads(hashToPath(location.hash));
        /*
         監聽hashchange切換view
         */
        $(window).on('hashchange', function (e) {
            var hash = location.hash;
            if(hash.indexOf('_') !== -1){
                hash = hash.substring(0, hash.indexOf('_'));
            }
            loads(hashToPath(hash));

        });
        function hashToPath(hash) {
            if (hash.indexOf('#') !== -1) {
                hash = hash.substring(1);
            }
            return 'app/' + hash + '/' + hash;
        }
        function loads(path) {
            require([path], function(view) {
                view.load();
            });
        }
    });
});

BaseController.jsjquery

define(function() {
    var setTemplate=function(template){
        this.template = template;
    };
    var render=function(container){
        // 獲取模板
        var templateStr = this.template;
        // 加載頁面
        container.innerHTML = templateStr;
    };
    return {
        setTemplate:setTemplate,
        render:render
    }
});

Base.jsgit

define(function(require) {

    var  viewContainer = null;
    function getViewContainer() {
        return viewContainer ? viewContainer : viewContainer = $('.view-container')[0];
    }
    return {
        getViewContainer: getViewContainer
    }
});

js/app/login下的文件:

login.htmlgithub

<div class="login-content">
    <form class="form-horizontal">
        <div class="form-group">
            <label class="col-sm-2 col-xs-2 control-label" id="userName">Username</label>
            <div class="col-sm-5 col-xs-5">
                <input type="text" class="form-control" id="inputUserName" placeholder="Username">
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 col-xs-2 control-label">Password</label>
            <div class="col-sm-5 col-xs-2">
                <input type="password" class="form-control" id="inputPassword" placeholder="Password">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-5 col-xs-5">
                <button type="button" class="btn btn-default" id="login">Sign in</button>
            </div>
        </div>
    </form>
</div>

login.jsbootstrap

define(function(require) {
    var Base = require('app/Base'),
        controller = require('../BaseController'),
        template = require('text!./login.html');
    /**
     * 對外暴露函數,用於視圖加載
     */
    var load = function() {
        render();
        bind();
        run();
    };
    /**
     * 視圖渲染
     */
    function render() {
        controller.setTemplate(template);
        controller.render(Base.getViewContainer());
    }
    /**
     * 事件綁定
     */
    function bind() {
        $('#login').on('click',function () {
            if($('#inputUserName').val()=='小穎'&&$('#inputPassword').val()==1028){
                alert('登錄成功!');
                location.hash = "home";

            }else {
                alert('登錄失敗!');
            }
        });
    }
    /**
     * 除事件綁定
     */

    function run() {
        $('.view-container').css("background","url(images/xiangrikui3.jpg) center/cover  no-repeat");
    }
    return {
        load: load
    };
});

js/app/home下的文件:

home.htmlapp

<div class="home-content">
    歡迎小穎
</div>

home.js異步

define(function(require) {
    var Base = require('app/Base'),
        controller = require('../BaseController'),
        template = require('text!./home.html');
    /**
     * 對外暴露函數,用於視圖加載
     */
    var load = function() {
        render();
        bind();
        run();
    };
    /**
     * 視圖渲染
     */
    function render() {
        controller.setTemplate(template);
        controller.render(Base.getViewContainer());
    }
    /**
     * 事件綁定
     */
    function bind() {
    }
    /**
     * 除事件綁定
     */

    function run() {
        $('.view-container').css('background-image','');
    }
    return {
        load: load
    };
});

js/lib下分別是:jquery.js、require.js、text.js這三個文件,小穎就不在這裏展現了,你們能夠在網上下一個,小穎把text.js下載地址給你們提供出來嘻嘻:text.js

相關文章
相關標籤/搜索