Jadual Kandungan
"+to_append[0]+"
Rumah hujung hadapan web tutorial js 用javascript作一个通用向导说明_javascript技巧

用javascript作一个通用向导说明_javascript技巧

May 16, 2016 pm 06:02 PM

1、界面设计
index.html:只提供了一个向导显示位置的占位符

复制代码 代码如下:



礼物推荐向导










style.css:默认情况下向导里有一个h2呈现的标题,一个ul呈现的主要内容,一个div呈现的按钮条,我们简单设计了一下他们的默认外观,实际应用中大家可以自由的美化它们。
复制代码 代码如下:

body{
margin:0;
}
/*向导容器*/
#wizard{
height:400px;
width:600px;
background-color:#999;
}
/*向导的主体内容,用列表展示*/
#wizard ul{
margin:10px;
height:80%;
}
/*横向显示列表内容*/
#wizard li{
display:inline-block;
margin:10px;
cursor:pointer;
}
/*列表的标题*/
#wizard h2{
margin:10px;
}
/*列表的功能条,如返回按钮*/
#wizard .bar{
margin:10px;
clear:both;
}

2、准备每一步骤

向导可以分为每一步骤,每个步骤需要呈现内容,捕捉用户选择,提供标题等功能,我们让每一步都自己负责自己的事情,但要符合我们规定的一些契约。

每一个步骤用一个函数表示,第一个参数data_key是选择本步骤数据的关键字,一般用于上一个步骤的结果决定下一个步骤显示数据的情况,第二个参数result_callback是个回调函数,就是在本步骤获取结果时调用,它用于和向导类进行通信,向导类在得到上一步的结果后存储结果并跳向到下一步。

该函数返回一个二元组,第一个元素是本步骤的标题,第二个元素是本步骤主体部分的UI。

我们的示例是一个礼物推荐系统,共分三步,第一步选择送礼对象,第二步选择关键字,其中第一步的选择结果会影响到第二步显示,第三步选择价格区间,如下就是代码的实现,其中绘制界面和事件捕捉用了jquery来简化操作。
复制代码 代码如下:

function step1(data_key, result_callback){
var targets = ['女朋友','男朋友','父亲','妈妈','孩子'];
var warpper = $('
    ')
    $.each(targets, function(k,v){
    $('
  • '+v+'
  • ').click(function(){result_callback(v)}).appendTo(warpper);
    });
    return ['第一步:请选择送礼物的对象',warpper];
    }
    function step2(data_key, result_callback){
    var tags = {
    '女朋友':['创意','可爱','浪漫','激情','实用','数码',
    '自制','毛绒玩具','衣服','包包'],
    '男朋友':['男士用品','温馨','实用','数码','创意','衣物'],
    '父亲' :['男士用品','健康','植物','衣物'],
    '妈妈' :['温馨','健康','创意','护肤品','实用'],
    '孩子' :['玩具','学习用品','实用','数码']
    };
    var warpper = $('
      ')
      $.each(tags[data_key], function(k,v){
      $('
    • '+v+'
    • ').click(function(){result_callback(v)}).appendTo(warpper);
      });
      return ['第二步:请选择关键词',warpper];
      }
      function step3(data_key, result_callback){
      var price_level = ['便宜','普通','稍贵','贵重'];
      var warpper = $('
        ')
        $.each(price_level, function(k,v){
        $('
      • '+v+'
      • ').click(function(){result_callback(v)}).appendTo(warpper);
        });
        return ['第三步:请选择价格区间',warpper];
        }

        3、向导类的实现

        向导类要设置向导所在的DOM元素,要执行的步骤列表,向导完成后执行的回调,向导还应该提供上一步和下一步的方法,所以我们用一个类来表示向导,在构造函数里传入DOM容器,步骤列表和回调函数,用prototype给类增加三个方法。render用来呈现某一步骤的UI,并在本步骤收集结果的回调里推向下一步,如果本步骤是最后一步,则调用向导执行完成的回调函数。

        另外两个next和back函数分别是执行上一个步骤和下一个步骤,这两个函数实用index的私有变量来维持整个向导的状态
        复制代码 代码如下:

        function Wizard(container, steps, callback){
        this.container = container; //向导容器
        this.steps = steps; //向导步骤
        this.callback = callback; //向导执行完毕执行的回调
        this.collect_data = []; //保存向导每一步骤的结果
        this.index = -1; //当前执行在那一步骤
        }
        //绘制某一步骤
        Wizard.prototype.render = function(step, this_result){
        var me = this;
        //执行该步骤并得到该步骤的UI
        var to_append = step(this_result,function(result){
        me.collect_data.push(result); //收集本步骤结果
        //向导执行完毕时调用回调函数,否则执行下一步
        if(me.collect_data.length == me.steps.length)
        me.callback(me.collect_data);
        else
        me.next(result);
        });
        //绘制本步骤的UI
        this.container.empty();
        this.container.append("

        "+to_append[0]+"

        ");
        this.container.append(to_append[1]);
        if(this.index > 0){
        //后退按钮
        this.container.append($("")
        .click(function(){me.back()}
        ));
        }
        }
        //执行下一步
        Wizard.prototype.next = function(this_result){
        if(this.index >= this.steps.length -1)
        return;
        var step = this.steps[++this.index];
        this.render(step,this_result);
        }
        //后退到上一步
        Wizard.prototype.back = function(){
        if(this.index return;
        var step = this.steps[--this.index];
        //步骤回到上一步,但上一步的数据需要上上一步的结果来决定
        this.collect_data = this.collect_data.slice(0, this.index);
        this.render(step, this.collect_data[this.index - 1]);
        }

        4、小结

        本向导结构简单,可定制性强,结合了javascript的函数式编程特性和面向对象的特性,体现了javascript的强大和便利。

        其中wizard类里界面绘制的部分和步骤函数里界面绘制的部分还是存在一些耦合,继续重构的话,可以把所有绘制界面的部分再抽象到一起,使界面改动更方便。
        Kenyataan Laman Web ini
        Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

        Alat AI Hot

        Undresser.AI Undress

        Undresser.AI Undress

        Apl berkuasa AI untuk mencipta foto bogel yang realistik

        AI Clothes Remover

        AI Clothes Remover

        Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

        Undress AI Tool

        Undress AI Tool

        Gambar buka pakaian secara percuma

        Clothoff.io

        Clothoff.io

        Penyingkiran pakaian AI

        AI Hentai Generator

        AI Hentai Generator

        Menjana ai hentai secara percuma.

        Artikel Panas

        R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
        2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
        Repo: Cara menghidupkan semula rakan sepasukan
        4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
        Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
        3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

        Alat panas

        Notepad++7.3.1

        Notepad++7.3.1

        Editor kod yang mudah digunakan dan percuma

        SublimeText3 versi Cina

        SublimeText3 versi Cina

        Versi Cina, sangat mudah digunakan

        Hantar Studio 13.0.1

        Hantar Studio 13.0.1

        Persekitaran pembangunan bersepadu PHP yang berkuasa

        Dreamweaver CS6

        Dreamweaver CS6

        Alat pembangunan web visual

        SublimeText3 versi Mac

        SublimeText3 versi Mac

        Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

        Ganti aksara rentetan dalam javascript Ganti aksara rentetan dalam javascript Mar 11, 2025 am 12:07 AM

        Penjelasan terperinci mengenai kaedah penggantian rentetan javascript dan Soalan Lazim Artikel ini akan meneroka dua cara untuk menggantikan watak rentetan dalam JavaScript: Kod JavaScript dalaman dan HTML dalaman untuk laman web. Ganti rentetan di dalam kod JavaScript Cara yang paling langsung ialah menggunakan kaedah pengganti (): str = str.replace ("cari", "ganti"); Kaedah ini hanya menggantikan perlawanan pertama. Untuk menggantikan semua perlawanan, gunakan ungkapan biasa dan tambahkan bendera global g: str = str.replace (/fi

        Tutorial Persediaan API Carian Google Custom Tutorial Persediaan API Carian Google Custom Mar 04, 2025 am 01:06 AM

        Tutorial ini menunjukkan kepada anda bagaimana untuk mengintegrasikan API carian Google tersuai ke dalam blog atau laman web anda, menawarkan pengalaman carian yang lebih halus daripada fungsi carian tema WordPress standard. Ia menghairankan mudah! Anda akan dapat menyekat carian ke y

        Contoh warna json fail Contoh warna json fail Mar 03, 2025 am 12:35 AM

        Siri artikel ini ditulis semula pada pertengahan 2017 dengan maklumat terkini dan contoh segar. Dalam contoh JSON ini, kita akan melihat bagaimana kita dapat menyimpan nilai mudah dalam fail menggunakan format JSON. Menggunakan notasi pasangan nilai utama, kami boleh menyimpan apa-apa jenis

        10 JQuery Syntax Highlighters 10 JQuery Syntax Highlighters Mar 02, 2025 am 12:32 AM

        Tingkatkan Penyampaian Kod Anda: 10 Penyeret Sintaks untuk Pemaju Coretan kod perkongsian di laman web atau blog anda adalah amalan biasa bagi pemaju. Memilih penyapu sintaks yang betul dapat meningkatkan daya tarikan dan daya tarikan visual dengan ketara. T

        Bina Aplikasi Web Ajax anda sendiri Bina Aplikasi Web Ajax anda sendiri Mar 09, 2025 am 12:11 AM

        Jadi di sini anda, bersedia untuk mempelajari semua perkara ini yang dipanggil Ajax. Tetapi, apa sebenarnya? Istilah Ajax merujuk kepada kumpulan teknologi longgar yang digunakan untuk membuat kandungan web yang dinamik dan interaktif. Istilah Ajax, yang asalnya dicipta oleh Jesse J

        8 plugin susun atur halaman jquery yang menakjubkan 8 plugin susun atur halaman jquery yang menakjubkan Mar 06, 2025 am 12:48 AM

        Leverage JQuery untuk Layouts Laman Web yang mudah: 8 Plugin Essential JQuery memudahkan susun atur laman web dengan ketara. Artikel ini menyoroti lapan plugin jQuery yang kuat yang menyelaraskan proses, terutamanya berguna untuk penciptaan laman web manual

        10 JavaScript & JQuery MVC Tutorial 10 JavaScript & JQuery MVC Tutorial Mar 02, 2025 am 01:16 AM

        Artikel ini membentangkan pemilihan lebih daripada 10 tutorial mengenai rangka kerja javascript dan jquery model-view-controller (MVC), sesuai untuk meningkatkan kemahiran pembangunan web anda pada tahun baru. Tutorial ini merangkumi pelbagai topik, dari Foundatio

        Apa itu ' ini ' Dalam JavaScript? Apa itu ' ini ' Dalam JavaScript? Mar 04, 2025 am 01:15 AM

        Mata teras Ini dalam JavaScript biasanya merujuk kepada objek yang "memiliki" kaedah, tetapi ia bergantung kepada bagaimana fungsi dipanggil. Apabila tidak ada objek semasa, ini merujuk kepada objek global. Dalam penyemak imbas web, ia diwakili oleh tetingkap. Apabila memanggil fungsi, ini mengekalkan objek global; tetapi apabila memanggil pembina objek atau mana -mana kaedahnya, ini merujuk kepada contoh objek. Anda boleh mengubah konteks ini menggunakan kaedah seperti panggilan (), memohon (), dan mengikat (). Kaedah ini memanggil fungsi menggunakan nilai dan parameter yang diberikan. JavaScript adalah bahasa pengaturcaraan yang sangat baik. Beberapa tahun yang lalu, ayat ini

        See all articles