08.JS逻辑交互

事件绑定

<view>
  <text bindtap="myClick">点我</text>
</view>
Page({

  myClick(){
    console.log('click');
  }
 
});

 

事件冒泡

view和text都绑定事件

<view bindtap='viewClick'>
  <text bindtap="textClick">点我</text>
</view>

js部分

Page({

  viewClick(){
    console.log('viewClick');
  },

  textClick(){
    console.log('textClick');
  }
 
});

css部分

view{ width: 300rpx; height: 150rpx; border: 1rpx solid red;}
text{ border: 1rpx solid green;}

当我们点击这里

会触发2个click事件,解决的方法是text的bindtap事件改成catchtap

<view bindtap='viewClick'>
  <text catchtap="textClick">点我</text>
</view>

微信小程序提供了很多冒泡事件,我们只学习了 tap,其他的在后面遇到会逐个使用,
这里可以参考微信小程序手册文档,共以下事件:
touchstart: 手指触摸
touchmove: 手指触摸后移动
touchcancel: 手指触摸动作被打断,如来电提醒、弹窗
touchend: 手指触摸动作结束
tap:手指触摸后离开(最常用的一种事件)
longtap: 手指触摸后,超过 250ms 再离开

 

事件对象

1.通过传一个参数得到这个事件对象;

/**
* 用户事件绑定
*/
myTextClick : function (e) {
    console.log(e);
},

2.type 属性表示事件类型

//得到 tag 表示触摸后离开
console.log(e.type);

3.timeStamp 属性表示触发事件经过的毫秒数

//触摸弹起之间的毫秒数
console.log(e.timeStamp);

4.target 属性表示触发的组件

//获取组件的源
console.log(e.target);

其中 id 子属性表示组件的 id,dataset 属性表示 data-开头的自定义属性集合,offsetLeft 和 offsetTop 表示组件坐标。

5.touches 属性

//获取触摸点
console.log(e.touches);

其中 pageX 和 pageY 距离文档左上角的距离,clientX 和 clientY 距离页面可显示区域左上角的距离。

在 three.js 中实现鼠标交互需要借助于鼠标事件,例如鼠标移动、鼠标点击等。下面是一个简单的示例,展示如何在 three.js 场景中实现鼠标交互: 1. 创建场景、相机、渲染器等 three.js 常规组件。 ```javascript const scene = new THREE.Scene(); const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); const renderer = new THREE.WebGLRenderer(); ``` 2. 创建一个立方体模型。 ```javascript const geometry = new THREE.BoxGeometry(); const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); const cube = new THREE.Mesh(geometry, material); scene.add(cube); ``` 3. 监听鼠标移动事件,根据鼠标位置计算相机旋转角度。 ```javascript let isDragging = false; let previousMousePosition = { x: 0, y: 0 }; renderer.domElement.addEventListener('mousedown', e => { isDragging = true; }); renderer.domElement.addEventListener('mousemove', e => { if (isDragging) { const { x, y } = e; const deltaMove = { x: x - previousMousePosition.x, y: y - previousMousePosition.y }; const deltaRotationQuaternion = new THREE.Quaternion() .setFromEuler(new THREE.Euler( toRadians(deltaMove.y * 1), toRadians(deltaMove.x * 1), 0, 'XYZ' )); cube.quaternion.multiplyQuaternions(deltaRotationQuaternion, cube.quaternion); } previousMousePosition = { x: e.x, y: e.y }; }); renderer.domElement.addEventListener('mouseup', e => { isDragging = false; }); ``` 4. 渲染场景。 ```javascript function animate() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate(); ``` 需要注意的是,这只是一个简单的示例,实际应用中可能需要更复杂的鼠标交互逻辑,例如拖拽、点击、双击等。可以根据实际需求来添加相应的鼠标事件监听器,并编写相应的交互逻辑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值