小程序上下页面滚动

话不多说,先来看效果:
在这里插入图片描述

1.html

<view class="container container-fill">
	<view class="scroll-fullpage" bindtouchstart="scrollTouchstart" bindtouchmove="scrollTouchmove" bindtouchend="scrollTouchend" style="transform:translateY(-{{scrollindex*100}}%);margin-top: {{margintop}}px">
		<view class="section section01 {{scrollindex==0?'active':''}}" style="background: #3399FF;">
			<text class="section-maintitle">页面1</text>
			<text class="section-subtitle">我的页面”1</text>
		</view>
		<view class="section section02 {{scrollindex==1?'active':''}}" style="background: #00CC66;">
			<text class="section-maintitle">页面2</text>
			<text class="section-subtitle">我的页面”2</text>
		</view>
		<view class="section section03 {{scrollindex==2?'active':''}}" style="background: #33CCCC;">
			<text class="section-maintitle">页面3</text>
			<text class="section-subtitle">我的页面”3</text>
		</view>
		<view class="section section04 {{scrollindex==3?'active':''}}" style="background: #6699FF;">
			<text class="section-maintitle">页面4</text>
			<text class="section-subtitle">我的页面”4</text>
		</view>
		<view class="section section05 {{scrollindex==4?'active':''}}" style="background: #9966FF;">
			<text class="section-maintitle">无缝对接双创服5</text>
			<text class="section-subtitle">我的页面”5</text>
		</view>
	</view>
</view>

2.CSS

page{
	height: 100%;
	background: fff;
	color: #282828;
}
.container {
	flex: 1;
  flex-direction: column;
 	box-sizing: border-box;
  padding: 0;
  align-items:initial;
  justify-content:first baseline;
}
.container-fill{
	height: 100%;
	overflow: hidden;
}
.scroll-fullpage{
	height: 100%;
}
.section{
	height: 100%;
}
.active .cont {
  -webkit-animation-duration: 1.8s;
  animation-duration: 1.8s;
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;
  -webkit-animation-name: fadeInUp;
  animation-name: fadeInUp;
}
.cont{
  width: 100%;
  height: 100%;
  margin: 0 auto;
  position: relative;
}
.cont .cont-body {
  width: 75%;
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%,-50%);
}.container-fill{
	height: 100%;
	overflow: hidden;
}
.scroll-fullpage{
	height: 100%;
	transition: all 0.3s;
}
.section{
	height: 100%;
}
.section-maintitle{
	display: block;
	text-align: center;
	font-size: 50rpx;
	color: #fff;
	font-weight: bold;
	letter-spacing: 10rpx;
	padding-top: 140rpx;
}
.section-subtitle{
	display: block;
	text-align: center;
	font-size: 40rpx;
	color: #fff;
	font-weight: bold;
	letter-spacing: 10rpx;
}
.active .section-maintitle,
.active .section-subtitle{
	animation: mymove 0.8s;
}
@keyframes mymove{
	from {
		transform: translateY(-400rpx) scale(0.5) rotateY(90deg);
	}
	to {
		transform: translateY(0) scale(1) rotateY(0);
	}
}

3.JS

// index.js
// 获取应用实例
const app = getApp()
Page({
  data: {
    scrollindex:0,  //当前页面的索引值
    totalnum:5,  //总共页面数
    starty:0,  //开始的位置x
    endy:0, //结束的位置y
    critical: 100, //触发翻页的临界值
    margintop:0,  //滑动下拉距离
  },
  onLoad: function () {
  },
  scrollTouchstart:function(e){
    let py = e.touches[0].pageY;
    this.setData({
      starty: py
    })
  },
  scrollTouchmove:function(e){
    let py = e.touches[0].pageY;
    let d = this.data;
    this.setData({
      endy: py,
    })
    if(py-d.starty<100 && py-d.starty>-100){    
      this.setData({
        margintop: py - d.starty
      })
    }
  },
  scrollTouchend:function(e){
    let d = this.data;
    if(d.endy-d.starty >100 && d.scrollindex>0){
      this.setData({
        scrollindex: d.scrollindex-1
      })
    }else if(d.endy-d.starty <-100 && d.scrollindex<this.data.totalnum-1){
      this.setData({
        scrollindex: d.scrollindex+1
      })
    }
    this.setData({
        starty:0,
        endy:0,
        margintop:0
    })
  },
})

IE下没有pageX,pageY这两个属性

pageX pageY:鼠标指针的位置,文档的坐标。

offsetX offsetY:鼠标相对于事件源元素的x,y坐标
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值