微信小程序功能之全屏滚动效果的实现代码
最近小编做项目遇到这样的需求,要求实现一个全屏滚动的效果,在网上找了实例代码,但是不是很完美,小编又结合自己的知识给大家补充下,对微信小程序全屏滚动效果的实例代码感兴趣的...
想做一个全屏滚动的效果,于是在网上找了一个差不多的例子,但是觉得有些地方不是很好,于是改进了一下;
先给大家展示下效果图,感觉不错,请参考实例代码。
代码:
wxml:
<!-- 第一页 -- >
<view id=
'hook1'
class=
"section section01 {{scrollindex==0?'active':''}}"
style=
'background:red'
bindtouchstart=
"scrollTouchStart"
bindtouchmove=
'scrollTouchMove'
bindtouchend=
"scrollTouchEnd"
>
<view class=
'cont'
>
<view class=
'cont-body'
>
<view>one</view>
</view>
</view>
</view>
<!-- 第二页 -->
<view id=
'hook2'
class=
"section section02 {{scrollindex==1?'active':''}}"
style=
'background:pink'
bindtouchstart=
"scrollTouchStart"
bindtouchmove=
'scrollTouchMove'
bindtouchend=
"scrollTouchEnd"
>
<view class=
'cont'
>
<view class=
'cont-body'
>
<view>two</view>
</view>
</view>
</view>
<!-- 第三页 -->
<view id=
'hook3'
class=
"section section03 {{scrollindex==2?'active':''}}"
style=
'background:blue'
bindtouchstart=
"scrollTouchStart"
bindtouchmove=
'scrollTouchMove'
bindtouchend=
"scrollTouchEnd"
>
<view class=
'cont'
>
<view class=
'cont-body'
>
<view>three</view>
</view>
</view>
</view>
<!-- 第四页 -->
<view id=
'hook4'
class=
"section section04 {{scrollindex==3?'active':''}}"
style=
'background:green'
bindtouchstart=
"scrollTouchStart"
bindtouchmove=
'scrollTouchMove'
bindtouchend=
"scrollTouchEnd"
>
<view class=
'cont'
>
<view class=
'cont-body'
>
<view>foure</view>
</view>
</view>
</view>
wxss:
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%;
}
.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%);
}
js:
Page({
/**
* 页面的初始数据
*/
data: {
scrollindex: 0,
// 当前页面的索引值
totalnum: 4,
// 总共页面数
starty: 0,
// 开始的位置x
startTime: 0,
// 开始的时间戳
endy: 0,
// 结束的位置y
endTime: 0,
// 结束的时间戳
critical: 80,
// 触发翻页的临界值
maxTimeCritical: 300,
// 滑动的时间戳临界值上限
minTimeCritical: 100,
// 滑动的时间戳临界值下限
margintop: 0,
// 滑动下拉距离
currentTarget:
null
,
// 当前点击的元素的id
},
scrollTouchStart:
function
(e) {
let py = e.touches[0].pageY,
stamp = e.timeStamp,
currentTarget = e.currentTarget.id;
console.log(py);
this
.setData({
starty: py,
startTime: stamp,
currentTarget: currentTarget
})
},
scrollTouchMove(e) {
// console.log(e);
},
scrollTouchEnd:
function
(e) {
let py = e.changedTouches[0].pageY,
stamp = e.timeStamp,
d =
this
.data,
timeStampdiffer = stamp - d.startTime;
this
.setData({
endy: py,
endTime: stamp
})
console.log(
'开始:'
+ d.starty,
'结束:'
+ e.changedTouches[0].pageY);
console.log(
'时间戳之差: '
+ timeStampdiffer);
if
(timeStampdiffer <= d.maxTimeCritical && timeStampdiffer > d.minTimeCritical && (d.starty > e.changedTouches[0].pageY)) {
let currentTarget = parseInt(d.currentTarget.slice(4)),
nextTarget = currentTarget + 1;
const query = wx.createSelectorQuery();
query.select(`
#hook${nextTarget}`).boundingClientRect();
query.selectViewport().scrollOffset();
query.exec(
function
(res) {
// console.log(res);
if
(res[0] !=
null
) {
wx.pageScrollTo({
scrollTop: res[0].height * currentTarget,
})
}
})
}
else
if
(timeStampdiffer <= d.maxTimeCritical && timeStampdiffer > d.minTimeCritical && (d.starty < e.changedTouches[0].pageY)) {
// 下拉
let currentTarget = parseInt(d.currentTarget.slice(4)),
preTarget = currentTarget - 2 == -1 ? 0 : currentTarget - 2;
const query = wx.createSelectorQuery();
query.select(`
#hook1`).boundingClientRect();
query.selectViewport().scrollOffset();
query.exec(
function
(res) {
console.log(res);
wx.pageScrollTo({
scrollTop: res[0].height * preTarget
})
})
}
},
})
总结
以上所述是小编给大家介绍的微信小程序功能之全屏滚动效果的实现代码,希望对大家有所帮助,也非常感谢大家的支持!
-
微信小程序实现点赞、取消点赞,和多项点击功能
文章主要为大家详细介绍了微信小程序实现点赞、取消点赞,和多项点击功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...
-
十款实用微信小程序推荐 好玩的微信小程序有哪些?
现在微信小程序的种类非常多,这不仅省去我们下载软件的麻烦,还可以节省手机的内存空间,那么,有什么微信小程序既好玩又实用的呢?小编今天就给大家介绍十款非常实用的小程序,记得收...
-
微信小程序群里有事使用方法 群里有事怎么用?
相信很多小伙伴都有这样的经历,在微信群里发消息,通常只有群主才能@所有人发通知,普通用户发通知很少被人看到。即便是群主,发布通知后也不知道哪些人看过,而且重要的通知以文字...
-
支付宝牌“小程序”也来了 对拼微信小程序
就在微信“小程序”开发者们还在焦头烂额,一头雾水的时候,支付宝也杀入了战场。近日,有多名互联网行业从业者向钛媒体记者透露,已经有支付宝的相关工作人员与他们取得联系,讨论的正是“小程序”的开发问题。“支付宝...
-
新的时代开启 微信小程序的观察与思考
一、关于小程序的“入口”小程序可在微信聊天页面中置顶,可添加到桌面。但如果是在聊天页面中置顶,只能置顶一个小程序。以及,在“发现”Tab中,也有“小程序”入口——这还是出乎不少人意料的。目前来看,这个入口有...
-
微信小程序上手体验:没有比这个更全的了
2017年1月9日,是一个值得载入互联网史册的日子。这一天,零点刚过,张小龙和他的团队,在夜色笼罩下,正式发布了微信小程序。所以,从这一刻开始,只要有开发者登录小程序后台,并在「开发管理」页面点击了「发布」按钮,就会有...
-
微信小程序在哪里打开?目前已经有100多小程序可以使用
今天你的朋友圈肯定被小程序刷屏了。 我在A5创业网后台搜一下,一天内有关小程序的言论要赶上不知名品牌动态一年的了。 这绝对是有点风吹就草翻天的主儿!...
-
微信小程序开放公测 做好这4件事抢占先机
昨天晚上,微信公众平台发布公告,宣布微信小程序正式开放公测。此次小程序公测允许开发者将产品提交至微信公众平台审核,但是暂时不支持发布,也就是说普通消费者若想体验小程序,还需要等待一段时间。什么人可...
-
微信小程序为何突然火了?微信小程序的发展趋势
未来的某一天,你在微信上遇见一个妹子,两人一见如故,相见恨晚,立马约好第二天一块出去玩。这时,你只需要打开微信自带的小程序,就可以为妹子预定好第二天的专车、预约好第二天的午餐,下午的游乐场,甚至…...
-
微信小程序:只是开发者的良药,而非“一切App”的毒药
昨晚打开微信朋友圈,关于微信小程序发布内测邀请函的消息漫天飞舞。今天一早翻阅新闻,各大媒体也纷纷表示看好微信应用号,有些媒体甚至扬言微信应用号将杀死一切App,大量的App都将会被用户卸载。不可否认,微...