微信小程序实现翻书效果

这篇具有很好参考价值的文章主要介绍了微信小程序实现翻书效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近要在微信小程序里实现一个类似翻页的场景,网上翻看了多个案例无非就两种实现,第一种通过css 3d变换+动画实现,第二使用Turn.js现成库。前者实现效果一般,后者js库是基于古老的JQuery来实现的并没办法移植到小程序了里。

下面就自己调研了一下turnjs来实现小程序的简单版本

微信小程序翻页效果,微信小程序,前端,javascript

turnjs效果截图

我的实现思路:

  1. 排版布局,通过绝对定位方式实现书页堆叠到一起就行(随意发挥)
  2. 监听touchmove事件,来确定拖拽时的动态坐标
  3. 根据拖拽页角的位置来计算翻页的角度和大小
  4. 通过css transfrom来创建一个背面露出来的部分
  5. 通过css clip-path来切出来下页露出来的部分(这里我的实现方案和turnjs不太一致,因为我在开发过程中发现clip-path这个属性实现起来更方便)
  6. 最后实现自动翻页

上代码:

WXML:

<!-- 书页 -->
<view
      wx:for="{{paper}}" 
      hidden="{{pagenum > paper.length - index - 1}}"
      wx:key="index"
      class="list-pape" 
      style="{{index == paper.length - pagenum - 1 ? clipPath1 : ''}}"
      catchtouchstart="touchstart"
      catchtouchmove="touchmove"
      catchtouchend="touchend">
      <image src="{{item}}"></image>
    </view>
<!-- 背面部分 -->
<view class="page-back" style="{{transformCss}};{{clipPath2}};{{transformOrigin}}">
      <image src="{{pageBackImage1}}"></image>
    </view>

JS(核心代码):

touchmove(e){
    let clientX = e.touches[0].clientX;
    let clientY = e.touches[0].clientY;
    this.flippingPage(clientX,clientY);
  },
//计算翻书效果
flippingPage(clientX,clientY){
    // 本人比较懒,这里写死了书的宽度和高度
    let width = 287; 
    let height = 450;

    let x = width - clientX;
    let y = height - clientY;

    let a = ((x/2 * x/2) + (y/2 * y/2)) / (x/2);
    let b = ((x/2 * x/2) + (y/2 * y/2)) / (y/2);
    a =  a > width ? width : a;

    let angle = (Math.atan(a / b) * (180 / Math.PI));
    angle = 180 - angle * 2;

    this.setData({
      pageBackImage: this.data.paper[this.data.paper.length - this.data.pagenum - 1],
      transformCss: 'transform: rotateX(180deg) rotateZ('+ angle +'deg)', 
      transformOrigin: 'transform-origin: right '+ (height - b) +'px',
      clipPath2: 'clip-path: polygon(100% 100%, ' + (width-a) +'px 100%, 100% ' +  (height - b) + 'px)',
      clipPath1: 'clip-path: polygon(0% 0%, 0% 100%, ' + (width-a) +'px 100%, 100% ' + (height - b) + 'px, 100% 0%)',
    })
  },

解释下这里的计算逻辑:文章来源地址https://www.toymoban.com/news/detail-686193.html

微信小程序翻页效果,微信小程序,前端,javascript
示例图1
  1. 这里的clipPath1是示例图1的露出部分的裁剪区域,实现这里效果,其实就是对上一页的(p1-p2-p3-p4-p5)坐标的裁剪
  2. 那剩下的关键就是算出O-P3和O-P4的距离(三角函数自行推导)
  3. 最后得出P1-P5的所有坐标,所得样式为: 'clip-path: polygon(p1,p2,p3,p4,p5)'
微信小程序翻页效果,微信小程序,前端,javascript
示例图2
  1.  这里的clipPath2是示例图2的背面部分的裁剪区域 
  2. 这里做红色背面部分其实也是对上一页进行 (镜像 - 旋转 - 裁剪) 所得
  3. 旋转角度为:2倍的∠ap4p3
  4. 裁剪区域为红色区 a-p4-p3

到了这里,关于微信小程序实现翻书效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序——实现手机振动效果

    ✅作者简介:2022年 博客新星 第八 。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:微信小程序学习分享 ✨特色专栏:国学周更-心性养成之路 🥭本文内容:微信小程序——实

    2024年02月15日
    浏览(64)
  • 微信小程序 - - - - - 瀑布流效果实现

    对于一些小程序,关于瀑布流的需求是很正常的,瀑布流看起来确实很舒服,但是具体该如何实现呢? 下文给出的方式是: js + css 瀑布流,又称 瀑布流式布局 。 是比较流行的一种网站页面布局, 视觉表现为 参差不齐的多栏布局 ,随着页面滚动条向下滚动,这种布局还会

    2024年02月17日
    浏览(44)
  • 微信小程序 实现进度条效果

    微信小程序中的原生进度条组件(Progress)只能显示一种进度状态,但有时我们需要展示多种状态,比如预算已使用与本次申请的进度。为了实现这一功能,我采用了 canvas 来绘制多种状态的进度条。记录下小程序原生组件 Progress 的单状态使用,以及通过 canvas 实现多状态进度

    2024年04月17日
    浏览(47)
  • 微信小程序搜索框吸顶效果实现

    主页要做一个搜索框,滑动主页页面的时候,搜索框始终位于导航栏下面,位置不变,不随页面的滑动而滑动,这种效果被称为”吸顶“效果。 点击搜索框,弹出上层搜索详情的视图层,搜索详情的整个页面覆盖在主页面之上,并且也覆盖住主要搜索框。 主页搜搜框设置

    2024年02月13日
    浏览(60)
  • 微信小程序组件 实现加载中效果

    大家好哇,我是梦辛工作室的灵,我又来了=-=,最近项目开发中,需实现一个加载效果,上图给大家看下: 感觉一般把,还是挺好写的,我就封装成了一个组件,方便大家以后使用,使用方法如下: 还是简单吧,原理其实也很简单,就是 n个正方形(中间一根线) 旋转 后就

    2024年02月12日
    浏览(50)
  • 微信小程序实现左边图片右边文字效果

     博主介绍: 本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮

    2024年02月01日
    浏览(96)
  • 【微信小程序】实现页面tab切换效果

    目录 前言 本次效果展示 一、如何实现页面tab 1.使用内置组件scroll-view 2.实现点击时出现的背景样式 3.使用scroll-into-view,实现点击时自动滚动 本次主要内容是介绍页面tab的开发,如何实现tab与页面内容联动呢?关注我就知道!   如下图所示,我们需要使用到红色框框中的属

    2024年02月09日
    浏览(111)
  • 记录--怎么实现一个3d翻书效果

    本篇主要讨论以下两种翻书动画的实现: 第一种是整页翻转的效果: 这种整页翻转的效果主要是做rotateY的动画,并结合一些CSS的3d属性实现。 第二种折线翻转的效果,如下图所示: 主要是通过计算页面翻折过来的位置。 这两种原理上都不是很复杂,需要各个细节配合好,

    2024年02月11日
    浏览(46)
  • 微信小程序实现抖音视频效果教程

    本文详细介绍了微信小程序中如何实现类似抖音视频效果的页面,包括视频播放、用户头像展示和基本信息展示等功能,提供了wxml、wxss和js文件的代码示例,助力开发者快速搭建。

    2024年02月12日
    浏览(80)
  • 微信小程序第六篇:元素吸顶效果实现

     系列文章传送门: 微信小程序第一篇:自定义组件详解 微信小程序第二篇:七种主流通信方法详解 微信小程序第三篇:获取页面节点信息 微信小程序第四篇:生成图片并保存到手机相册 微信小程序第五篇:页面弹出效果及共享元素动画 话不多说,先看效果: 这种效果在

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包