1、首先:

renderjs一个运行在视图层js。它比​​​WXS更加强大。它只支持appvueweb

turn.js官网这里:  Turn.js: The page flip effect in HTML5

如果只是单纯的H5端引入turnjs,是不需要renderjs的,但是我的项目因为是在app端,就得用到renderjs

我们可以这样理解uniapp一个大圆,renderjs就是大圆中的小圆,那么turnjs就住在这个小圆里,我们这个小圆叫做视图层,大圆叫做逻辑

2、基本实现思路

2.1、第一步确定renderjsuniapp数据通信方式完成数据通信,才可以针对turnjs配置项,做些uniapp自己逻辑层的操作

renderjs使用方式可以查阅官网直接介绍如何通信

2.1.1、逻辑层向视图层传递数据

<view class="flipbook-viewport" 
			:rect="rect" 
			:change:rect="updateRenderData"	
&gt;
<view class="container"  &gt;
					<view class="flipbook" id="flipbook" &gt;
						------------
					</view&gt;
				</view&gt;
			</view&gt;	

 rect逻辑对应属性或者方法,当值改变时,就会触发图层对应的逻辑操作。rect可以改成自己任意名字,逻辑操作的名字也可以改成自己任意的,可成对添加多个

2.1.2视图层向逻辑层的通信

部分操作必须在dom绑定相应的主动触发事件比如touchendclick才可以触发例如

<view class="flipbook-viewport" 
			:rect="rect" 
			:change:rect="updateRenderData"	
            @touchend="turnjs.onClick"
>
<view class="container"  >
					<view class="flipbook" id="flipbook" >
						<div class='hard'></div>
					</view>
				</view>
			</view>	
<script>    // 逻辑层的js
	import '@/utils/jquery.min.1.7.js';
	import turn from '@/utils/turn.js';
	export default {
		computed: {			
			rect() {
				return {					
					width: this.width,
					height: this.height
				}

			}
			
		},
methods:{
    // 接收renderjs发回的数据
			onViewClick(options) {
			     console.log('renderjsCall回调');
			     console.log(options);
				 
			    },
}			
			
	}
</script>

<script lang="renderjs" module="turnjs">
// 视图层的js
	import '@/utils/jquery.min.1.7.js';
	import turn from '@/utils/turn.js';
	export default {
		data() {
			return {
				width: '',
				height: ''				
			}
		},		
		mounted() {	
			this.onTurn();			
		},
		methods: {			
								
			onClick(event, ownerInstance) {
				// 操作内容
                ownerInstance.callMethod('onViewClick', {
							curpage: 0							
						})
				
				},				
			onTurn() {
				$("#flipbook").turn({
					autoCenter: true,
					display: 'single',
					height: this.height,
					width: this.width,
					elevation: 50,
					duration:500,
					gradients: true,
					when: {
							turning: function(event, page, pageObject) {
								// 翻页时							
						},	}
				});				
			}
			
		}		
	}
</script>

通过@touchend=”turnjs.onClick 来主动发起视图层的逻辑,然后逻辑内部通过ownerInstance.callMethod传递数据到逻辑层,“onViewClick”,就是逻辑层内接收数据函数然后进行一系列的操作就好了。

3、说一下turnjs的注意事项官方css样式贴出来,我的项目中,引入情况不生效,所以就写到文件里了。

.flipbook-viewport{overflow:hidden;width:100%;height:100%;.container{display: flex;justify-content: center;align-items: center;margin: 0 auto;}.flipbook ::v-deep .page{background-color: white;background-repeat: no-repeat;background-size: 100% 100%;-webkit-box-shadow:0 0 20px rgba(0,0,0,0.2);-moz-box-shadow:0 0 20px rgba(0,0,0,0.2);-ms-box-shadow:0 0 20px rgba(0,0,0,0.2);-o-box-shadow:0 0 20px rgba(0,0,0,0.2);box-shadow:0 0 20px rgba(0,0,0,0.2);img {-webkit-touch-callout: none;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none;margin:0;}}.shadow{-webkit-transition: -webkit-box-shadow 0.5s;-moz-transition: -moz-box-shadow 0.5s;-o-transition: -webkit-box-shadow 0.5s;-ms-transition: -ms-box-shadow 0.5s;-webkit-box-shadow:0 0 20px #ccc;-moz-box-shadow:0 0 20px #ccc;-o-box-shadow:0 0 20px #ccc;-ms-box-shadow:0 0 20px #ccc;box-shadow:0 0 20px #ccc;}
}

同时我发现一个现象,如果的page内容可以写死,那就简单太多,直接在常规的data里面定义数组,在dom中去渲染就好。page中的内容如果是动态的,会因为初始化问题无法启动turn,所以我在最开始就添加了第一页内容,保证能启动turnjs,应该是还有更好的办法,我没有想到。

<view class="flipbook" id="flipbook" >
						<div class='hard'></div>
					</view>

然后通过renderjs里面添加内容的监听,如果内容有改变,就添加页面

updateSimulationText(newVal, oldVal) {  //renderjs里面的操作
				$("#flipbook").turn('pages',1)     // 内容变化时,保留1页
				$("#flipbook").turn('pages',newVal.arr.length) // 添加数组长度的页数				
				for (var i=0; i<newVal.arr.length;i++) {
					var tagHtml = "";							
					tagHtml = "<div></div>";     // 一个page的内容					
					if (!$("#flipbook").turn('hasPage', i+2)) {
					        // Create an element for this page
					        var element = $('<div />').html('');
					        // Add the page
					        $("#flipbook").turn('addPage', element, i+2);
					        element.html(tagHtml);
					}
				}				
				
			},	

项目中的实际逻辑是,当turnjs翻页是,要通知逻辑层page+1,turnjs换章节时,要通知逻辑层获取指定章节的内容,但是通信思路跟上面的提到的相同,就不再赘述了。

原文地址:https://blog.csdn.net/wh4834/article/details/129831844

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_45714.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注