javascript高手教教我(添加事件侦听,广播事件)

javascript高手教教我(添加事件侦听,广播事件),第1张

function DoEvents(){

this.lstner=[]//this.lstner? lstner是属性吗? this又是指什么对象, []是指数组吗?javascript的写法是这样的吗? 不用加个声明吗

//相当于类参数(this指当前类)。声明了一个数组,javascript的写法就是这样的,要加声明么?"=[]"不就说明了吗。

this.addListen=function(obj){

//添加侦听

obj=typeof(obj)=="string"?document.getElementById(obj):this.lstner.push(obj)

//这是一个逻辑判断的三元表达式(typeof(obj)=="string"?document.getElementById(obj):this.lstner.push(obj)) + 赋值(obj=),

//意思是如果obj是string类型(== 逻辑判断),则返回document.getElementById(obj),否则返回this.lstner.push(obj)<-将obj压入数组中后返回

//在最后,将返回值赋给obj,从下面的处理来看,其实赋值给obj没有什么实质用处。

}

this.broadcastEvent=function(f,args){//广播事件// broadcastEvent为什么在帮助文档和搜索引擎里找不到呢,他是指什么 <-内部自定义的方法,相当于类方法

for(i=0i<this.lstner.lengthi++){

eval(f).apply(this.lstner[i],args)//这句的意思是? ,<- 将指定的事件(f)绑定到需要触发事件的对象(this.lstner[i])上。

// 这个 f是指什么? args又是指什么? <- f是由调用时指定的事件名称(methodName), args 是该方法触发是所要的参数列表,请参照调用的地方。

}

}

}

我说一下我的实现场景。

1.引入了一个obj的模型(引入相应的loader.js。我这里用的MTL,OBJ,DDSloader)

THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() )

    var mtlLoader = new THREE.MTLLoader()

    mtlLoader.load('model/gaoda/file.mtl',function(materials){

materials.preload()

var loader = new THREE.OBJLoader()

loader.setMaterials(materials)

loader.load( 'model/gaoda/file.obj', function ( obj ) {

  _this.cube = obj

  _this.cube.position.set(0,1,0)

  _this.scene.add( _this.cube )

}, onProgress, onError )

})

2.在three的raysects为模型添加事件

var raycaster = new THREE.Raycaster()

var mouse = new THREE.Vector2()

mouse.x = ( event.clientX / window.innerWidth )*2 - 1

mouse.y = -( event.clientY / window.innerHeight )*2 + 1

raycaster.setFromCamera( mouse, _this.camera )

var intersects = raycaster.intersectObjects( _this.cube.children )

_this.initMessage(intersects,event.clientX,event.clientY)

3.最后监听该点击事件就行了。

 window.addEventListener('click',this.clickModel,false)

效果图如下:

我也是才开始学习THREE。希望能帮助到你。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/bake/11734094.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存