gpt4 book ai didi

javascript - 如何在 aframe 中向此 JavaScript 添加关闭按钮

转载 作者:行者123 更新时间:2023-12-02 23:46:57 25 4
gpt4 key购买 nike

本质上,我在 aframe 中有一个模式窗口,我试图通过 JavaScript 添加一个关闭按钮,但我无法弄清楚。

链接到以下项目:

https://andrewmc1994.github.io/Image-Link-Test/

如果您突出显示指南针图标,您就会明白我的意思。

这是一个大学项目,我在网上查看了各种方法,但似乎都不起作用,所以这就是我来这里的原因。

        <a-entity ui-modal="triggerElement:#selection;" visible="false">

<a-image src="#submenu" scale="3.5 3.5 0" position="0 -0.25 2" src-fit></a-image>

<a-image position="-1 -0.25 2.1" class="clickable" src="#tqicon" scale="0.7 0.7 0" link="href:location1.html; on: click; visualAspectEnabled: false" src-fit></a-image>

<a-image position="0 -0.25 2.1" class="clickable" src="#acicon" scale="0.7 0.7 0" link="href:location3.html; on: click; visualAspectEnabled: false" src-fit></a-image>

<a-image position="1 -0.25 2.1" class="clickable" src="#bchicon" scale="0.7 0.7 0" link="href:location2.html; on: click; visualAspectEnabled: false" src-fit></a-image>

<a-image position="1.4 0 2.1" class="clickable" src="#close" scale="0.1 0.1 0" id="close" src-fit></a-image>

</a-entity>

/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};

/******/ // The require function
/******/ function __webpack_require__(moduleId) {

/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;

/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };

/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/ // Flag the module as loaded
/******/ module.loaded = true;

/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }


/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;

/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;

/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";

/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports) {

/**
* UI modal component for A-Frame.
*/

if (typeof AFRAME === 'undefined') {
throw new Error('Component attempted to register before AFRAME was available.');
}

AFRAME.registerComponent('ui-modal', {

schema: {
trigger: {
default: 'click'
},
triggerElement: {
default: '',
},
zpos: {
default: -4
}
},

init: function() {

document.querySelector(this.data.triggerElement).addEventListener(this.data.trigger, this.eventHandler.bind(this));

this.cameraEl = document.querySelector('a-entity[camera]');

this.yaxis = new THREE.Vector3(0, 0, 0);
this.zaxis = new THREE.Vector3(0, 0, 0);

this.pivot = new THREE.Object3D();
this.el.object3D.position.set(0, this.cameraEl.object3D.getWorldPosition().y, this.data.zpos);

this.el.sceneEl.object3D.add(this.pivot);
this.pivot.add(this.el.object3D);

},


eventHandler: function(evt) {

if (this.el.getAttribute('visible') === false) {

var direction = this.zaxis.clone();
direction.applyQuaternion(this.cameraEl.object3D.quaternion);
var ycomponent = this.yaxis.clone().multiplyScalar(direction.dot(this.yaxis));
direction.sub(ycomponent);
direction.normalize();

this.pivot.quaternion.setFromUnitVectors(this.zaxis, direction);
this.pivot.position.copy(this.cameraEl.object3D.getWorldPosition());

this.el.setAttribute('visible', true);

} else if (this.el.getAttribute('visible') === true) {

this.el.setAttribute('visible', false);
}

},

update: function (oldData) {},

remove: function() {}

});




/***/ }
/******/ ]);

因此,预期结果是用户打开模式窗口,然后能够使用简单的按钮将其关闭。

非常感谢任何帮助。

最佳答案

您只需向现有的关闭按钮添加任何功能即可。您的 eventHandler 已经包含用于显示/隐藏 UI 的逻辑,因此只需向关闭按钮添加一个监听器即可:

let closeBtn = document.getElementById("close") one close button
closeBtn.addEventListener(this.data.trigger, this.eventHandler.bind(this))

单击时 - 它将隐藏 UI。

但是,还有更多带有 ui-modal 组件的元素,它们的 eventHandler 会触发 setAttribute("visible", "") 部分。

解决这个问题最简单的方法是

closeBtn.addEventListener(this.data.trigger, e => {
this.el.setAttribute("visible", "false")
})

让关闭按钮隐藏该元素,这里无需执行任何操作。

<小时/>至于阿克塞尔的担忧,你其实不需要做太多比较。您可以将它们视为 bool 值:

这是有效的:

if (this.el.getAttribute("visible") {
// hide
} else {
// show
}

还有这个:

// toggle visibility
this.el.setAttribute("visible", !this.el.getAttribute("visible")

您可以在this查看 fiddle 。

关于javascript - 如何在 aframe 中向此 JavaScript 添加关闭按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55816229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com