小程序功能之全屏滚动

想做一个全屏滚动的效果,于是在网上找了一个差不多的例子,但是觉得有些地方不是很好,于是改进了一下;

原文:https://blog.csdn.net/W_SSNY/article/details/84298788

先上效果:

代码:

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
                  })
              })
          }
     },
})

  如有错误的地方欢迎指正~,共勉。

原文地址:https://www.cnblogs.com/bsblogs/p/9996843.html

时间: 2024-10-11 16:06:11

小程序功能之全屏滚动的相关文章

学习 | jQuery全屏滚动插件FullPage.js

简介 fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站. 主要功能 支持鼠标滚动 支持前进后退和键盘控制 多个回调函数 支持手机.平板触摸事件 支持 CSS3 动画 支持窗口缩放 窗口缩放时自动调整 可设置滚动宽度.背景颜色.滚动速度.循环选项.回调.文本对齐方式 兼容性 fullPage.js 支持 IE8+ 及其他现代浏览器.测试代码 测试代码 <!DOCTYPE html> <html lang="en">

手机端实现fullPage——全屏滚动效果

封装了一个小插件模拟fullPage的全屏滚动效果,比较简单. 特点: 1.  纯js实现,小巧轻便. 2.  兼容性好.苹果.安卓都没问题,暂时没遇到问题机型. 缺点: 1.  仅封装了基础功能,HTML.css么有去封装.个人觉得不封装更方便大家使用. 接下来看看效果图: 相比效果大家都看到了,接下来看看代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title&

全屏滚动效果H5FullscreenPage.js

前提: 介于现在很多活动都使用了 类似全屏滚动效果 尤其在微信里面 我自己开发了一个快速构建 此类项目的控件 与市面上大部分控件不同的是此控件还支持元素的动画效果 并提供多种元素效果 基于zepto.js 功能清单: 1 快速实现页面全屏滚动效果.并提供多种翻页效果,兼容大部分ios和android系统. 2 支持在页面中添加多种动画元素效果 来实现淡入,滑入等效果. 3 支持配置音乐功能. 4 支持摇一摇接口功能. 组件核心代码原理: 1 页面滚动 在移动页面上如果想使用滚动,如过没有任何动画

jQuery全屏滚动插件fullPage.js中文帮助

简介 fullPage.js是一个基于jQuery的全屏滚动插件,它能够很方便.很轻松的制作出全屏网站 主要功能 支持鼠标滚动 支持前进后退和键盘控制 多个回调函数 支持手机.平板触摸事件 支持 CSS3 动画 支持窗口缩放 窗口缩放时自动调整 可设置滚动宽度.背景颜色.滚动速度.循环选项.回调.文本对齐方式等等 兼容性 fullPage.js 支持 IE8+ 及其他现代浏览器. 使用方法 1.引入文件 <link rel="stylesheet" href="css/

onepage scorll全屏滚动插件

onepage scorll全屏滚动插件,它能够很方便.很轻松的制作出单页/全屏滚动页面.兼容主流浏览器,懒人图库推荐下载! 使用方法: 1.head区域引用文件onepage-scroll.css,jquery.min.js,jquery.onepage-scroll.min.js及以下样式 .page1 { } .page2 { background-color: #FF7F50;} .page3 { } .page4 { background-color: #f90;} p.title {

自己用js实现全屏滚动

参照fullPage.js的效果,用自己的想法实现的. 实现的效果:1.全屏滚动,滚动一下齿轮就会滚动全屏. 2.自适应缩放,无论怎么改变窗口的大小,都会保证用一个元素占满全屏. 下一步计划: 1.改成react组件 2.实现更多的效果 注释写的很清楚,基本上知道函数怎么用就可以了.有想法这东西就很简单. 这里偷懒使用了我之前写过的一个运动框架(其实就是一个函数),稍加修改就可以在这上面使用.框架相关:点击这里 注释非常详细了,就不说其他的了.直接上代码: 1 <!DOCTYPE html>

js全屏滚动效果

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>全屏滚动代码测试</title> 6 <style type="text/css"> 7 body,ul,li{ margin: 0; padding: 0;} 8 #tbody{ overflow: hidden; clear: both;

jquery.fullPage.js全屏滚动插件

效果演示 网站   http://www.51xuediannao.com/demo.php 插件下载  http://www.51xuediannao.com/js/jquery/jquery.fullPage.html jquery.fullPage.js是一个全屏滚动插件,本文提供jquery.fullPage实例教程演示 看啥都不如看演示来的直观,走起! 基本滚动 http://www.51xuediannao.com/js/jquery/jquery.fullPage/index2.h

原生js实现全屏滚动

原生js实现全屏滚动(firefox兼容性问题还没解决) 最近发现刷前端在线简历,发现许多人都使用了全屏滚动特效 所以今天特意来实现一下 css样式:* { margin: 0; padding: 0;}h1 { width: 200px; height: 200px; margin: 0 auto;}div{ overflow: hidden; position: absolute;}.show { display: block;} /*第一页*/#one { background: red;