博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
better-scroll:在react中用better-scroll封装一个滚动的组件
阅读量:6910 次
发布时间:2019-06-27

本文共 15973 字,大约阅读时间需要 53 分钟。

文件分为三部分:index.js+PullUp.js+PullDown.js

index.js:better.scroll的初始化

PullUp.js:初始化上拉加载更多

PullDown.js:初始化下拉刷新功能

 

index.js

'use strict';Object.defineProperty(exports, "__esModule", {  value: true});var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();var _templateObject = _taggedTemplateLiteral(['\n  overflow: hidden;\n  position: relative; // \u53EF\u9632\u6B62 scrollbar \u8D85\u51FA wrapper \u9AD8\u5EA6\n'], ['\n  overflow: hidden;\n  position: relative; // \u53EF\u9632\u6B62 scrollbar \u8D85\u51FA wrapper \u9AD8\u5EA6\n']);var _react = require('react');var _react2 = _interopRequireDefault(_react);var _propTypes = require('prop-types');var _propTypes2 = _interopRequireDefault(_propTypes);var _styledComponents = require('styled-components');var _styledComponents2 = _interopRequireDefault(_styledComponents);var _betterScroll = require('better-scroll');var _betterScroll2 = _interopRequireDefault(_betterScroll);var _PullDown = require('./PullDown');var _PullDown2 = _interopRequireDefault(_PullDown);var _PullUp = require('./PullUp');var _PullUp2 = _interopRequireDefault(_PullUp);function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }var Wrapper = _styledComponents2.default.div(_templateObject);var Scroller = function (_PureComponent) {  _inherits(Scroller, _PureComponent);  function Scroller(props) {    _classCallCheck(this, Scroller);    var _this = _possibleConstructorReturn(this, (Scroller.__proto__ || Object.getPrototypeOf(Scroller)).call(this, props));    _this.state = {      pullDown: false,      pullUp: false    };    _this.wrapperRef = _react2.default.createRef();    return _this;  }  _createClass(Scroller, [{    key: 'componentDidMount',    value: function componentDidMount() {      var _props = this.props,          options = _props.options,          onPullDown = _props.onPullDown,          onPullUp = _props.onPullUp;      var opts = _extends({        scrollbar: { fade: true },        click: true      }, options);      var state = {};      if (onPullDown) {        opts.pullDownRefresh = { threshold: 60, stop: 60 };        state.pullDown = true;      }      if (onPullUp) {        opts.pullUpLoad = { threshold: 60 };        state.pullUp = true;      }      this.bScroll = new _betterScroll2.default(this.wrapperRef.current, opts);      if (Object.keys(state).length) {        this.setState(state);      }    }  }, {    key: 'render',    value: function render() {      var _props2 = this.props,          children = _props2.children,          onPullDown = _props2.onPullDown,          onPullUp = _props2.onPullUp,          className = _props2.className;      var _state = this.state,          pullDown = _state.pullDown,          pullUp = _state.pullUp;      return _react2.default.createElement(        Wrapper,        { className: className, innerRef: this.wrapperRef },        _react2.default.createElement(          'div',          { className: 'bScroll-content' },          children,          pullUp ? _react2.default.createElement(_PullUp2.default, { bScroll: this.bScroll, onPullUp: onPullUp }) : null        ),        pullDown ? _react2.default.createElement(_PullDown2.default, { bScroll: this.bScroll, onPullDown: onPullDown }) : null      );    }  }]);  return Scroller;}(_react.PureComponent);Scroller.propTypes = {  options: _propTypes2.default.object,  children: _propTypes2.default.any,  onPullDown: _propTypes2.default.func,  onPullUp: _propTypes2.default.func,  className: _propTypes2.default.string};Scroller.defaultProps = {  options: {},  children: null,  onPullDown: null,  onPullUp: null,  className: 'bScroll'};exports.default = Scroller; PullUp.js
'use strict';Object.defineProperty(exports, "__esModule", {  value: true});var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();var _templateObject = _taggedTemplateLiteral(['\n  width: 100%;\n  height: 60px;\n'], ['\n  width: 100%;\n  height: 60px;\n']),    _templateObject2 = _taggedTemplateLiteral(['\n  height: 100%;\n  line-height: 60px;\n  text-align: center;\n'], ['\n  height: 100%;\n  line-height: 60px;\n  text-align: center;\n']),    _templateObject3 = _taggedTemplateLiteral(['\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n'], ['\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n']);var _react = require('react');var _react2 = _interopRequireDefault(_react);var _propTypes = require('prop-types');var _propTypes2 = _interopRequireDefault(_propTypes);var _styledComponents = require('styled-components');var _styledComponents2 = _interopRequireDefault(_styledComponents);var _spin = require('../spin');var _spin2 = _interopRequireDefault(_spin);function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }var Wrapper = _styledComponents2.default.div(_templateObject);var Before = _styledComponents2.default.div(_templateObject2);var After = _styledComponents2.default.div(_templateObject3);var PullUp = function (_PureComponent) {  _inherits(PullUp, _PureComponent);  function PullUp(props) {    _classCallCheck(this, PullUp);    var _this = _possibleConstructorReturn(this, (PullUp.__proto__ || Object.getPrototypeOf(PullUp)).call(this, props));    _this.state = {      loading: false,      text: '加载更多'    };    return _this;  }  _createClass(PullUp, [{    key: 'componentDidMount',    value: function componentDidMount() {      var _this2 = this;      var _props = this.props,          bScroll = _props.bScroll,          onPullUp = _props.onPullUp;      bScroll.on('pullingUp', function () {        _this2.setState({ loading: true });        var result = onPullUp();        if (!result) {          _this2.setState({ loading: false, text: '没有更多数据了~' });          bScroll.finishPullUp();        } else {          result.then(function () {            _this2.setState({ loading: false, text: '加载更多' });            bScroll.finishPullUp();            bScroll.refresh();          });        }      });    }  }, {    key: 'render',    value: function render() {      var _state = this.state,          loading = _state.loading,          text = _state.text;      var beforeStyle = { display: !loading ? 'block' : 'none' };      return _react2.default.createElement(        Wrapper,        null,        _react2.default.createElement(          Before,          { style: beforeStyle },          text        ),        loading ? _react2.default.createElement(          After,          null,          _react2.default.createElement(_spin2.default, { size: '32px' })        ) : null      );    }  }]);  return PullUp;}(_react.PureComponent);PullUp.propTypes = {  bScroll: _propTypes2.default.object.isRequired,  onPullUp: _propTypes2.default.func.isRequired};exports.default = PullUp; PullDown.js
'use strict';Object.defineProperty(exports, "__esModule", {  value: true});var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();var _templateObject = _taggedTemplateLiteral(['\n  position: absolute;\n  width: 100%;\n  height: 60px;\n  left: 0;\n'], ['\n  position: absolute;\n  width: 100%;\n  height: 60px;\n  left: 0;\n']),    _templateObject2 = _taggedTemplateLiteral(['\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  \n  .icon {\n    width: 32px;\n    height: 32px;\n    \n    &.flip {\n      transform: rotate(-180deg) translateZ(0);  \n    }\n  }\n'], ['\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  \n  .icon {\n    width: 32px;\n    height: 32px;\n    \n    &.flip {\n      transform: rotate(-180deg) translateZ(0);  \n    }\n  }\n']),    _templateObject3 = _taggedTemplateLiteral(['\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n'], ['\n  height: 100%;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n']);var _react = require('react');var _react2 = _interopRequireDefault(_react);var _propTypes = require('prop-types');var _propTypes2 = _interopRequireDefault(_propTypes);var _styledComponents = require('styled-components');var _styledComponents2 = _interopRequireDefault(_styledComponents);var _ArrowDown = require('../icons/ArrowDown');var _ArrowDown2 = _interopRequireDefault(_ArrowDown);var _spin = require('../spin');var _spin2 = _interopRequireDefault(_spin);function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }function _taggedTemplateLiteral(strings, raw) { return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }var Wrapper = _styledComponents2.default.div(_templateObject);var Before = _styledComponents2.default.div(_templateObject2);var After = _styledComponents2.default.div(_templateObject3);var PullDown = function (_PureComponent) {  _inherits(PullDown, _PureComponent);  function PullDown(props) {    _classCallCheck(this, PullDown);    var _this = _possibleConstructorReturn(this, (PullDown.__proto__ || Object.getPrototypeOf(PullDown)).call(this, props));    _this.isRebounding = false;    _this.initTop = -60;    _this.initState = {      top: _this.initTop + 'px',      before: true,      isFlip: false    };    _this.state = _this.initState;    return _this;  }  _createClass(PullDown, [{    key: 'componentDidMount',    value: function componentDidMount() {      var _this2 = this;      var _props = this.props,          bScroll = _props.bScroll,          onPullDown = _props.onPullDown;      bScroll.on('pullingDown', function () {        _this2.setState({ before: false });        onPullDown().then(function () {          _this2.isRebounding = true;          bScroll.finishPullDown();          setTimeout(function () {            _this2.setState(_this2.initState);            _this2.isRebounding = false;            bScroll.refresh();          }, bScroll.options.bounceTime);        });      });      bScroll.on('scroll', function (pos) {        var state = {};        if (_this2.state.before) {          state.top = Math.min(pos.y + _this2.initTop, 0) + 'px';        }        if (pos.y >= 60) {          state.isFlip = true;        }        if (_this2.isRebounding) {          state.top = 0 - (60 - pos.y) + 'px';        }        if (Object.keys(state).length) {          _this2.setState(state);        }      });    }  }, {    key: 'render',    value: function render() {      var _state = this.state,          top = _state.top,          before = _state.before,          isFlip = _state.isFlip;      var wrapperStyle = { top: top };      var ArrowIconClassName = isFlip ? 'icon flip' : 'icon';      return _react2.default.createElement(        Wrapper,        { style: wrapperStyle },        before ? _react2.default.createElement(          Before,          null,          _react2.default.createElement(_ArrowDown2.default, { className: ArrowIconClassName })        ) : null,        before ? null : _react2.default.createElement(          After,          null,          _react2.default.createElement(_spin2.default, { size: '32px' })        )      );    }  }]);  return PullDown;}(_react.PureComponent);PullDown.propTypes = {  bScroll: _propTypes2.default.object.isRequired,  onPullDown: _propTypes2.default.func.isRequired};exports.default = PullDown;

转载于:https://www.cnblogs.com/JJoan/p/10056258.html

你可能感兴趣的文章
Steve Thair谈DevOps on Windows的演变与面临的挑战
查看>>
京东物流王梓晨:打造全栈团队,你要避开这些大坑
查看>>
安全狗:云时代的服务器安全守护者
查看>>
AlphaZero进化论:从零开始,制霸所有棋类游戏
查看>>
Maven开始逃离 XML 阵营
查看>>
苹果公司透露Siri新发音引擎的内部原理
查看>>
Andreas Schliep问答:关于ScALeD——大规模敏捷和精益开发
查看>>
解密新一代Java JIT编译器Graal
查看>>
Studio 3T:MongoDB SQL探究
查看>>
微软发布VSBT:无需安装Visual Studio即可实现项目编译
查看>>
2016,驻足、思考、寻找方向
查看>>
基于Kafka实现分布式事件驱动
查看>>
支撑AIOps的运维角色和技能有哪些?
查看>>
浏览器渲染的过程
查看>>
扎克伯格发信表示押注区块链,即时通讯 + 加密货币 = 全球化使用!
查看>>
从Jenkins迁移到Jenkins X:一场持续交付之旅\n
查看>>
终极指南:如何使用Visual Studio Code进行 Java 开发?
查看>>
GitHub采用了新的GraphQL API
查看>>
保持分布式团队同步
查看>>
如何在国内构建一个硅谷级的高效技术团队?
查看>>