bob体育官方平台
js基于myFocus完成轮播图效果_javascript技巧_脚本之家

本文实例为大家分享了myFocus轮播图的具体代码,供大家参考,具体内容如下

Step 1. 在html的标签内引入相关文件

1 <script type="text/javascript" src="js/myfocus-2.0.0.min.js"></script><!--引入myFocus库-->
2 <script type="text/javascript" src="js/mf-pattern/slide3D.js"></script><!--引入风格js文件-->
3 <link href="js/mf-pattern/slide3D.css" type="text/css" /><!--引入风格css文件-->

提示:符合条件的情况下,引入风格文件(js/css)可省,引入myFocus库即可。那么风格文件是如何自动引入的?详情请看myFocus的文件结构与自动引入风格文件机制。

文章出处http://javascript.ruanyifeng.com/nodejs/express.html#toc13

完整文件及代码:

Step 2. 创建myFocus标准的html结构,并填充你的内容

<div id="boxID"><!--焦点图盒子-->
  <div class="loading"><img src="img/loading.gif" alt="请稍候..." /></div><!--载入画面(可删除)-->
  <div class="pic"><!--内容列表(li数目可随意增减)-->
      <ul>
        <li><a href="#"><img src="img/1.jpg" thumb="" alt="标题1" text="详细描述1" /></a></li>
        <li><a href="#"><img src="img/2.jpg" thumb="" alt="标题2" text="详细描述2" /></a></li>
        <li><a href="#"><img src="img/3.jpg" thumb="" alt="标题3" text="详细描述3" /></a></li>
        <li><a href="#"><img src="img/4.jpg" thumb="" alt="标题4" text="详细描述4" /></a></li>
        <li><a href="#"><img src="img/5.jpg" thumb="" alt="标题5" text="详细描述5" /></a></li>
      </ul>
  </div>
</div>

IMG标签的属性说明:

  • src : 图片地址;
  • thumb : 图片的略缩图地址(需要风格支持,可以省略,如果省略即把大图地址作为它的地址);
  • alt : 图片的描述文字;
  • text : 图片更详细的描述文字(需要风格支持,可以省略)

    #### Step 3. 在step1代码之后的任意一个位置调用(建议在head标签结束前调用)

     1 //你可以简单的调用---只设置它的盒子id,其它参数全部默认设置:
     2 <script type="text/javascript">
     3 myFocus.set({id:'boxID'});
     4 </script>
     5 
     6 //或详细一点的参数调用:
     7 <script type="text/javascript">
     8 myFocus.set({
     9     id:'boxID',//焦点图盒子ID
    10     pattern:'mF_fancy',//风格应用的名称
    11     time:3,//切换时间间隔(秒)
    12     trigger:'click',//触发切换模式:'click'(点击)/'mouseover'(悬停)
    13     width:450,//设置图片区域宽度(像素)
    14     height:296,//设置图片区域高度(像素)
    15     txtHeight:'default'//文字层高度设置(像素),'default'为默认高度,0为隐藏
    16 });
    17 </script>
    

    经过这3步,你就可以学会myFocus的用法了。

  •  附:

    ###### myFocus的文件结构与自动引入风格文件机制

    事实上,风格文件是不需要在使用时手动引入,myFocus会根据你的pattern设置,寻找myFocus库文件目录下的mf-pattern目录,当找到相应的风格文件后,自动引入。

    这样,你只需要把你的风格文件放在myFocus库文件目录下的mf-pattern目录内,即可实现自动引入机制。

    例如,你的myFocus-2.0.0.min.js文件放在js目录,那么,只需在js目录内建立一个mf-pattern的子目录,这个子目录便是myFocus程序可以识别的存放风格文件的目录。

    在mf-pattern目录中,也存在一个img的子目录,它是存放某些风格的图片文件,虽然并不是每款风格都会有图片文件。

    建议把所有的风格文件都存放在这个mf-pattern目录,这样你就可以随意切换你的风格了,而且它是按需加载,并不会引入其它多余的文件。myFocus的整个加载量(主库+风格)平均只有12KB左右。

    另外需要说明的是,这个自动引入机制已经做的足够智能,它并不会重复引入风格文件,例如当你已经手动引入风格文件,又或者干脆把某风格的js代码写在页面上,这时myFocus并不会再次寻找引入风格文件,而是直接读取页面上的。

详情请见:

小结:每一个被require的文件都是一个exports实例.比如下面我们讲到的var blogEngine = require('./blog');那么我们要使用blogEngine.getBlogEntries()就是要在blog.js文件里面添加exports.getBlogEntries()方法的定义.前一个文章的api.index也是一样的道理.
要使得网站支持动态网页,首先就得需要能够解析动态内容的模板引擎

step1.页面引入相关文件

5.1安装模板引擎

Express支持多种模板引擎,这里采用这里采Handlebars模板引擎的服务器端版本hbs模板引擎。先安装hbs

/Learn/EX/third# npm i hbs --save

上面代码会把hbs模块安装在项目目录的子目录node_modules下,--save参数表示会把该模块的版本依赖信息写入package.json文件中.安装完模板引擎之后,我们来改写app.js,其实不需要前面例子中那么多require,最简洁的完整启动文件如下:

// app.js文件

var express = require('express');
var app = express();

// 加载hbs模块
var hbs = require('hbs');

// 指定模板文件的后缀名为html
app.set('view engine', 'html');

// 运行hbs模块
app.engine('html', hbs.__express);

app.get('/', function (req, res){
    res.render('index');
});

app.get('/about', function(req, res) {
    res.render('about');
});

app.get('/article', function(req, res) {
    res.render('article');
});

app.listen(3000);

上面代码改用render方法,对网页模板进行渲染.render方法的参数就是模板的文件名,默认放在子目录views之中,后缀名我们已经在前面app.set('view engine', 'html');指定为html,所以在render里面可以省略后缀名.所以res.render('index')就是指把子目录views下的index.html文件交给模板引擎hbs去渲染.

step2.写html结构、js

5.2 新建数据脚本

渲染是指将数据代入模板的过程.数据一般都是保存在数据库之中的,这里为了简化操作,我们把数据保存在一个脚本文件中.在项目目录下新建一个blog.js文件用于存放数据同时定义了获取全部数据和根据id获取一条数据的方法.blog.js的写法符合CommonJS规范,使得它可以被require语句加载.可以看到,这个数据文件不需要严格的对齐,只要括号成对出现即可,要求没有yml格式文件那么严格.

/Learn/EX/third# touch blog.js

blog.js内容如下:

// blog.js文件
var entries = [
      {"id": 1,"title": "第一11篇","body": "正文","published": "6/2/2013"},
    {"id": 2,"title": "第二篇","body": "正文","published": "6/3/2013"},
    {"id": 3,"title": "第三篇","body": "正文","published": "6/4/2013"},
       {"id": 4,"title": "第四篇","body": "正文","published": "6/5/2013"},
    {"id": 5,"title": "第五篇","body": "正文","published": "6/10/2013"},
    {"id": 6,"title": "第六篇","body": "正文","published": "6/12/2013"}
];

exports.getBlogEntries = function (){
        return entries;
}

exports.getBlogEntry = function(id){
    for(var i=0;i < entries.length;i++){
        if(entries[i].id == id) return entries[i]
    }
}
 #boxID { width: 560px; height: 300px; margin: 0 auto; padding-top: 100px; } 

5.3 新建网页模板

/Learn/EX/third# cd views
/Learn/EX/third/views# touch layout.html

然后全部的html文件如下:

  • layout.html
<!DOCTYPE html>
<html>
<head>
    <title>{{title}}</title>
</head>
<body>
    <!-- 三对花括号 -->
    {{{body}}}
    <footer>
        <p>
            <a href="/">首页</a> - <a href="/about">自我介绍</a>
        </p>
    </footer>
</body>
</html> 
  • index.html
<!-- views/index.html文件 -->
<h1>文章列表</h1>
{{#each entries}}
   <p>
      <a href="/article/{{id}}">{{title}}</a><br/>
      Published: {{published}}
   </p>
{{/each}}
  • article.html
<!-- views/article.html文件 -->
<h1>{{blog.title}}</h1>
Published: {{blog.published}}
<p/>
{{blog.body}}
  • about.html
<!-- views/about.html文件 -->
<h1>自我介绍</h1>
<p>正文</p>

html结构、简单js 如下:

5.4渲染模板

修改app.js启动文件,引用数据模块,给三个路由动作在render的时候传递变量,第三个路由动作监听url添加:id.

// app.js文件

var express = require('express');
var app = express();

// 加载hbs模块
var hbs = require('hbs');

// 加载数据模块
var blogEngine = require('./blog');

// 指定模板文件的后缀名为html
app.set('view engine', 'html');

// 运行hbs模块
app.engine('html', hbs.__express);

app.get('/', function (req, res){
    res.render('index',{title: "最近文章",entries: blogEngine.getBlogEntries()});
});

app.get('/about', function(req, res) {
    res.render('about',{title:"自我介绍"});
});

app.get('/article/:id', function(req, res) {
    var entry = blogEngine.getBlogEntry(req.params.id);
    res.render('article',{title: entry.title,blog: entry});
});

app.listen(3000);

给三个路由动作传递变量是一键值对的形式,比如title: "最近文章",会被每个页面的共同布局<title>{{title}}</title>解析为<title>最近文章</title>,也就是页面的tab标签文本.,后面的数据则是根据数据模板的方法获取并赋值给比如blog这样的变量,然后我们在html模板中就可以使用这些变量的值了.

代码很少,看代码就知道程序运行流程了.
1: 在views目录下创建共同的布局layout.html的话,不需要我们在启动文件做特殊处理,我们在寻找每一个具体页面比如/about对应页面时会自动把/about页面嵌入layout.html的body标签.
2: 页面解析变量都是使用{{}},但是渲染局部模板时必须使用{{{body}}},不然我们可以看到页面只能渲染js变量却不能渲染html标签.
3: {{#each entries}} {{/each}}里面可以不写变量名,直接写字段名就默认是每个遍历出来的对象的字段.

上一篇:没有了 下一篇:对json的理解
返回顶部