博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于React的全屏滑动插件react-fullslip
阅读量:7208 次
发布时间:2019-06-29

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

npm上已有react-fullpage,但是他的实现方式是使用锚点,重新刷新后会出现bug.

因此自己造了一个轮子.欢迎大家使用,star,PR

github地址:  

2018.07.29更新

  • 新增箭头导航参数,点击箭头可翻页

2018.07.25更新

  • 新增了改变滑动方向的参数,可改为竖向或横向;
  • 新增了导航点可添加自定义图片的参数。

使用

插件已经上传npm.

  • 下载

npm install react-fullslip复制代码

  • 引入

import {FullSlip,SlipItem} from "react-fullslip";复制代码

  • 使用

render() {  let options = {    navigation: true,//是否开启导航点,默认为true    activeClass: 'active',自定义导航点类名,默认为active,.navigation-dot下的.active    duration:1000,//屏幕滑动切换的时间,默认为1000    transverse:true,//是否更改为横向滑动,默认为false    navImage:[require('./assets/1.jpg'),require('./assets/2.jpg'),require('./assets/3.jpg')]//导航点图片,可选,默认无图片    arrowNav:true, //是否开启箭头导航 默认false不开启  };  return (    
page1
page2
page3
);}复制代码

需求:全屏滚动,不需要滚动条

这里我定义了两个组件,FullSlip和SlipItem,由FullSlip包住SlipItem并且在SlipItem里面完成页面.

FullSlip

全屏滚动的容器组件
在componentDidMount时绑定mouseWheel事件,这里做了兼容处理:

componentDidMount() {  if (document.addEventListener) {  	document.addEventListener('DOMMouseScroll', this.mouseScroll.bind(this), false);  }	window.onmousewheel = document.onmousewheel = this.mouseScroll.bind(this);}复制代码

mouseScroll中的逻辑:

  1. 判断是否正在滚动 
  2. 判断边界 
  3. 当前页改变

//翻页函数 n=1向后翻页 n=-1向前翻页scroll(n) {  this.setState({    isScroll: true,    currentPage: this.state.currentPage + n  });  setTimeout(() => {//动画 duration时间结束后再把状态切换为没有滑动    this.setState({      isScroll: false    })  }, this.state.duration);}//给document/window绑定的滚轮时间mouseScroll(e) {  e = e || window.event;  if (this.state.isScroll) {    return false;//如果正在滚动,取消事件  }  if (e.wheelDelta < 0 || e.detail > 0) {//小于0说明向下滚动    if (this.state.currentPage >= this.state.pageCount) {//边界判断      return false;    }    this.scroll(1)  } else if (e.wheelDelta > 0 || e.detail < 0) {    if (this.state.currentPage <= 0) {      return false;    }    this.scroll(-1)  }};复制代码

点击导航切换到对应页:

//给导航点绑定点击事件 index为传入的页面索引handleNavClick(index) {  this.setState({    currentPage: index  })}复制代码

//给箭头导航绑定点击事件handleArrowClick(n) {  if (this.state.currentPage > this.state.pageCount) {//边界判断    return false;  }  this.scroll(n);}复制代码

css

为了不显示全屏滚动条,在css中做了处理

//隐藏滚动条html {  overflow: -moz-scrollbars-none; //firefox  -ms-overflow-style: none; //ie}html::-webkit-scrollbar { /*webkit内核*/  display: none;}复制代码

SlipItem

单纯的页面容器组件,在这里可以编写页面

预览

结尾

再次欢迎大家使用,star,PR

转载地址:http://zuwym.baihongyu.com/

你可能感兴趣的文章
Python 内建函数
查看>>
瑞星:齐心共筑企业终端安全
查看>>
2、Nginx配置文件nginx.conf的配置详解
查看>>
LVS的dr模型的工作原理
查看>>
一段典型的PHP程序都包含那些内容呢?
查看>>
zabbix_agentd windows配置
查看>>
物联网的通天塔困境:试图平息标准之争反而引发另一场大战
查看>>
穿越ASA进行traceroute或tracert测试
查看>>
Python基础教程__项目(公告板)
查看>>
顺时针和逆时针螺旋打印二维数组(行列式)
查看>>
wxWidgets中字符串操作例子
查看>>
C#设计模式(14)——模板方法模式(Template Method)
查看>>
构建高性能的ASP.NET应用(五)-如何开始寻找性能瓶颈
查看>>
ipython notebook [jupyter] 使用
查看>>
[原创]Editplus巧删文本中大量空行
查看>>
SharePoint常见问题一:无法连接数据库
查看>>
LAMP自动安装脚本(上)
查看>>
安全规范和指南系列之二
查看>>
IT草根的江湖之路之七: 挑战,刚刚开始
查看>>
总结之:CentOS6.5 DNS服务BIND配置、正反向解析、主从及压力测试(1)
查看>>