如你所见,上面的 cube 的旋转、加速、减速停止都是通过 AlloyTouch 去实现的。
演示
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<script src="asset/three.js"></script> <script src="../../alloy_touch.js"></script> <script> var camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 ); camera.position.z = 500; var scene = new THREE.Scene(); var texture = new THREE.TextureLoader().load( 'asset/crate.gif' ); //几何体 var geometry = new THREE.BoxBufferGeometry( 200, 200, 200 ); //材质 var material = new THREE.MeshBasicMaterial( { map: texture } ); var mesh = new THREE.Mesh( geometry, material ); //添加到舞台 scene.add( mesh ); var renderer = new THREE.WebGLRenderer(); renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); document.body.appendChild( renderer.domElement ); function animate() { requestAnimationFrame( animate ); renderer.render( scene, camera ); } animate(); new AlloyTouch({ touch: document, //触摸整个文档 vertical: false, //监听横向触摸 target: mesh.rotation, //运动 mesh.rotation property: "y", //被运动的属性 y factor: 0.08, //运动期间的摩擦力 moveFactor: 0.2 //拖拽期间的摩擦力 }) </script> |
factor 需要自己不断去调试出最佳的值,让松手之后的惯性运动的速率和时间达到最佳的效果。
moveFactor 需要自己不断去调试出最佳的值,就是让横向拖拽的距离映射到旋转的角度上达到最跟手的效果。
如果,不需要惯性运动。比如像王者荣耀里的任务旋转就是没有惯性的,手指离开屏幕就会立马停止运动。如:
你只需要在 new AlloyTouch 设置 inertia 为 false 便可。
无惯性演示
无惯性代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<script src="asset/three.js"></script> <script src="../../alloy_touch.js"></script> <script> ... ... ... animate(); new AlloyTouch({ touch: document, //触摸整个文档 vertical: false, //监听横向触摸 target: mesh.rotation, //运动 mesh.rotation property: "y", //被运动的属性 y factor: 0.08, //运动期间的摩擦力 moveFactor: 0.2 , //拖拽期间的摩擦力 inertia: false //禁止惯性运动 }) </script> |
开始 AlloyTouch 吧
Github 地址:https://github.com/AlloyTeam/AlloyTouch
欢迎 issues:https://github.com/AlloyTeam/AlloyTouch/issues