• 一个完整的移动端项目的构建步骤——框架搭构2


    首页部分

      这里暂且不管css和img部分,因为这里非常好处理,随便给css设置点东西,作为调试使用,接下来,开始正式的编写——

    首先,将各种第三方插件全部加载进去,即

    <script src="js/zepto.js"></script>
    <script src="js/director.js"></script>

    然后将下面的东西加载上去
    <script src="js/module/baseModule.js"></script> ——基本模版
    <script src="js/module/home.js"></script>    ——子模块特化home网页部分
    <script src="js/module/rank.js"></script>    ——子模块特化rank网页部分
    <script src="js/module/login.js"></script>    ——子模块特化login网页部分
    <script src="js/route.js"></script>        路由调整用的js
    <script src="js/init.js"></script>         中转站用的js

    当然,里面的东西都是空。

    杂七杂八的东西加进去之后,就是这个样子的——

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>busDemo</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"><!-- 只要是移动端页面,必须加上 -->
        <link rel="stylesheet" href="css/common.css"> <!-- 加载公用css代码 -->
        <link rel="stylesheet" href="css/home.css"> <!-- 加载首页css代码 -->
        <link rel="stylesheet" href="css/rank.css">    <!-- 加载排名页css代码 -->
        <link rel="stylesheet" href="css/login.css">
    </head>
    <body>
        <section id="home" style="display:block" class="home"></section>
        <section id="rank" style="display:block" class="rank"></section>
        <section id="login" style="display:block" class="login"></section>
        <section id="form_bus" style="display:block" class="form_bus"></section>
        <section id="citylist" style="display:block" class="citylist"></section>
        <script src="js/zepto.js"></script>
        <script src="js/director.js"></script>
        <script src="js/module/baseModule.js"></script>
        <script src="js/module/home.js"></script>
        <script src="js/module/rank.js"></script>
        <script src="js/module/login.js"></script>
        <script src="js/route.js"></script>
        <script src="js/init.js"></script>
    </body>
    </html>

    然后,我们第一个书写baseModule部分。

    我们会将多个网页的代码写在一个html中,通过display将其控制,显示或者隐藏,达到类似快速跳转的作用。而大部分的子页面中都存在重复东西,或者需要一个模板,所以我们专门建立这个网页共通模(mú)板。

    作为一个高级前端工程师(可能是),我们决不能直接jquery的q到结尾,这样不仅后期维护非常困难(当每个页面的同一部分需要修改的时候就是灾难,想想看为成百上千个页面换一个广告壁纸的工作量吧.....),而且显得很low,所以我们要使用面向对象的方式写js。

    基础代码如下:

     1 window.baseModule = {
     2     el: null,
     3     init: function(){
     4         this.render(); //-->渲染自己特有页面的方法
     5         this.bindEvent();    
     6     },
     7     render: function(){
     8         this.renderContent();
     9     },
    10     bindEvent: function(){
    11         
    12     },
    13     renderContent: function(){
    14         //每个模块的renderContent都不一样         
    15     },
    16     enter: function(){
    17         //进入该模块页
    18         this.el.show();
    19     },
    20     leave: function(){
    21         //离开该模块页
    22         this.el.hide();
    23     }
    24 }

    这就是一个通用模版对象了,第一行表示自动加载这个对象。

    对象中有el,这个值对应着各个子页面的名称,如home,rank等等。

    init方法:init是初始化的意思,即,加载了这个方法会初始化这个模块,简单来说就是启动这个模块,具体来说就是启动里面的方法,第一个render方法代表渲染,表示这个页面里所有的渲染效果,第二个方法bindevent表示绑定事件,点击事件等等都写在这里,这样,配合css基本上一个页面就可以展示出来了。

    于是,接下来就是书写render方法和bindevent方法

    renderContent方法:上面写的都是公有的方法,但是每个页面都还有自己独特的事件和方法,这部分就写在这里,当然,这个方法在这里本身是空白的,是为了让其他对象继承用的,子页面需要特殊渲染的时候,直接继承并重写就好了。

    enter方法和leave方法:页面的切换,即各个子页面的显示和隐藏的控制,调用这个方法就会显示页面或隐藏页面。

    【接下来我们以首页部分的js为例子继续讲解】

     1 window.homeModule = Object.create(baseModule);
     513 (function(){
    14     
    15     //利用自执行函数,对我们变量进行保护,不随意污
    16     //染全局环境,否则会导致变量冲突。
    17     var selfModule = {
    18         
    19         el: $('#home'),
    20         renderContent: function(){
    21             this.el.html('我是首页的模块')
    22             console.log('我是首页的模块');
    23         },
    24         bindEvent: function(){
    25             this.el.click(function(){
    26                 //hash值 是url中#后面的内容
    27                 location.href = "#/rank";
    28             })         
    29         }
    30     }
    31     $.extend(homeModule,selfModule) //两个对象之间的合并         
    32 })();

    看起来意外的简单是不是?

    当然不是,就功能上来讲,只写了一个切换而已,还有好多好多没写呢,当然,这个问题以后再说——

    结合上面的代码,可以看到,这个代码首先【这个对象是包裹在自执行函数,也就是闭包当中的】,这是为了防止全局变量的污染,而且请注意这个对象的名字是selfModel,这个名字也是其他子页面对象的名字,如果直接放在外面就会被反复重写。

    回到代码,第一句自然就是继承,将基础模板继承给homeModel,然后就是一个自执行函数。函数中有一个对象,对比公共模板可以发现:

    el有值了,获得的$('#home');就是它的值;

    然后rendercontent和bindevent也有了内容了,通过继承了模板之后,再重写这两个方法,整个模块就完成了。

    基本的运作方式是,通过执行init函数,将需要的各个函数一起启动,因为函数进行了重写,所以对应的对象中会启动独有的函数,达到不同的效果。于此,正常来讲,页面应该完成了——

    但是,前面说了,移动端的网页全放在一起,仅仅是这样还不够,需要有判断条件决定什么时候跳转什么页面,且这个页面不会因为刷新而蹦到首页上去。

  • 相关阅读:
    maven pom 详细配置
    寻找二叉树最远的叶子结点
    控制两个线程的启动顺序
    tensorflow之神经网络实现流程总结
    ubuntu服务器安装FTP服务
    ubuntu服务器 安装 seafile 个人网盘
    软件工程实践总结作业~
    Beta 答辩总结
    Beta 冲刺 (7/7)
    Beta 冲刺 (6/7)
  • 原文地址:https://www.cnblogs.com/thestudy/p/5624248.html
Copyright © 2020-2023  润新知