我爱编程

侧边工具条开发

2018-03-19  本文已影响0人  不要变成发抖的小喵喵喵喵喵喵

使用Sass、RequireJS

样式实现方式 使用Sass

逻辑实现 使用requirejs,jQuery

  1. 依赖jQuery,定义可以灵活设置滚动距离的scrollto模块
// scrollto.js
define(['jquery'], function($) {
    'use strict';
    function ScrollTo(opts){
        this.opts = $.extend({}, ScrollTo.DEFAULTS, opts);
        this.$el = $('html, body');
    }
    ScrollTo.DEFAULTS = {
        dest: 0,
        speed: 800
    };
    ScrollTo.prototype.move = function(){
        console.log('move')
        var opts = this.opts,
            dest = opts.dest;
        if($(window).scrollTop() != dest){
            if(!this.$el.is(':animated')){
                this.$el.animate({
                    scrollTop: dest 
                }, opts.speed);
            }
        }
    };
    ScrollTo.prototype.go = function(){
        var opts = this.opts.dest;
        if($(window).scrollTop() != dest){
            this.$el.scrollTop(dest);
        }
    };
    return {
        ScrollTo: ScrollTo
    }
});
  1. 依赖jQuery、scrollto模块,定义返回顶部组件
// backtop.js
define(['jquery', 'scrollto'], function($, scrollto) {
    'use strict';
    function BackTop(el, opts){
        this.opts = $.extend({}, BackTop.DEFAULTS, opts);
        this.$el = $(el);
        this.scroll = new scrollto.ScrollTo({
            dest: 0,
            speed: this.opts.speed
        });
        if(this.opts.mode === 'move'){
            this.$el.on('click', $.proxy(this._move, this));
        }else{
            this.$el.on('click', $.proxy(this._go, this));
        }
        $(window).on('scroll', $.proxy(this._checkPosition, this));
    }
    BackTop.DEFAULTS = {
        mode: 'move',
        pos: $(window).height(),
        speed: 800
    };
    BackTop.prototype._move = function(){
        this.scroll.move();
    };
    BackTop.prototype._go = function(){
        this.scroll.go();
    };
    BackTop.prototype._checkPosition = function(){
        var $el = this.$el;
        if($(window).scrollTop() > this.opts.pos){
            $el.fadeIn();
        }else{
            $el.fadeOut();
        }
    };
    // jquery插件写法
    $.fn.extend({
        backtop: function(opts){
            return this.each(function(){
                new BackTop(this, opts);
            });
        }
    })
    return {
        BackTop: BackTop
    };
});
  1. 调用
requirejs(['jquery', 'backtop'], function($, backtop){

    // 构造函数调用方式
    // new backtop.BackTop($('#backTop'), {
    //     mode: 'move',
    //     pos: 100,
    //     speed: 2000
    // });

    // jquery插件的写法
    $('#backTop').backtop({
        mode: 'move'
    });
});

预览

Sass的基础知识

使用

ul{
    li{
        a{

        }
    }
}
ul li a{}
$toolbar-size: 52px;

// 使用
.toolbar{
    margin-left: -$toolbar-size / 2;
}
@mixin transition($transition){
    -webkit-transition: $transition;
    -moz-transition: $transition;
    -o-transition: $transition;
    -ms-transition: $transition;
    transition: $transition;
}

// 使用
.toolbar-layer{
    @include transition(all 1s);
}
@import "mixin";
@extend .icon-wechat;

RequireJS

RequireJS常用的方法

  1. requirejs.config
  2. requirejs
// main.js
requirejs.config({
    // 直接改变基目录
    baseUrl: "js/lib",
    // 指定各个模块的加载路径。
    paths: { // 定义别名
        jquery: 'jquery.min'
    },
    // 专门用来配置不兼容的模块。没有采用AMD规范编写
    shim: {
     'jquery.scroll': {
          deps: ['jquery'],
          exports: 'jQuery.fn.scroll'
      }
   }
});

// 模块引入, 并调用
requirejs(['jquery', 'validate'], function ($, validate) {
    $('body').css('background-color', 'red');
    console.log(validate.isEqual('1','2'));
});
  1. define
// validate.js
define([
    'jquery' // 添加依赖
], function($) {
    'use strict';
    return {
        isEqual: function(str1, str2){
            return str1 === str2;
        }
    }
});
  1. html中引入
<script src="js/require.js" data-main="js/main"></script>
上一篇下一篇

猜你喜欢

热点阅读