1

I would like to access the variable "theSkyColour" inside the HTML code below as shown. May I know how do I access it as shown?

The following is the code I have written:

function getSkyColour() {
  var theSkyColour = localStorage.getItem('skySet[enter image description here][1]ting');
}
<a-sky id="skyColor" src="#sky" 
material="shader:gradient; topColor: <<I want to access theSkyColor here>>; bottomColor: <<I want to access theSkyColor here>> ; offset:0;"></a-sky>

I have viewed other answers like the one here: Javascript variable access in HTML, however, it did not work for me as I am unable to change the color of the sky in the viewing page.

I've created the following HTML pages. 1. A settings page to adjust the color of the sky saved in a localStorage as "skyColor". 2. A viewing page for the user to view the color of the sky.

The reason why I have an a-sky tag is that I am using aframe.io

Update: After attempting to use JavaScript along with localStorage Sessions:

Javascript Code:

<script>
function getSkyColor() {
  var theSkyColor = localStorage.getItem('skySetting');
}
getSkyColour()

var myAttr = "shader:gradient; topColor:"+theSkyColor+"; 
bottomColor:"+theSkyColor+"; offset:0;"
document.getElementById(‘skyColor’).setAttribute(“material”,myAttr)
</script>

HTML Code:

  <a-sky id="skyColor" src="#sky" material="shader:gradient; offset:0;"></a-sky>

Unfortunately, it still does not work, as the display I get is not what I have expected, which is a night sky under the RGB color: 41 35 71. (See attached screenshot)

Failed display of desired colors RGB 41 35 71

What I want and What I have

4
  • It's not possible to access javascript variable in html. Commented Nov 19, 2018 at 9:59
  • check this: w3schools.com/js/js_htmldom_css.asp Commented Nov 19, 2018 at 10:00
  • 2
    "It did not work for me" how? It is not very descriptive. Please update the snippet I made for you with your attempts - Also please tell us what framework has <a-sky tags Commented Nov 19, 2018 at 10:03
  • Tri this: document.getElementById('skyColor').setAttribute('material', document.getElementById('skyColor').getAttribute('style')+'; color: '+getSkyColour()); Commented Nov 19, 2018 at 10:09

3 Answers 3

0

Unless you are using a framework like Angular or django, it is not possible to access variables in your HTML code, instead you can construct the attribute in your Javascript and add it to the element.

EX:

var myAttr = "shader:gradient; topColor:"+skyColor+"; bottomColor:"+skyColor+"; offset:0;"
$("#skyColor").attr("material",myAttr)

Update: without using jQuery:

<script>
function getSkyColour() {
  var theSkyColour = localStorage.getItem('skySetting');
}
getSkyColour()

var myAttr = "shader:gradient; topColor:"+theSkyColour+"; bottomColor:"+theSkyColour+"; offset:0;"
document.getElementById(‘skyColor’).setAttribute(“material”,myAttr)

</script>
Sign up to request clarification or add additional context in comments.

18 Comments

For the second line "$("#skyColor").attr("material",myAttr)" , may I know where should I place this line of code? Is this a PHP code? How do I use it?
This is a jQuery code, you need to have jQuery library in your application to use it. If you do not have jQuey library, I will suggest an alternative to it in pure JavaScript
I would like to use pure Javascript as well. However, like I mentioned in the original post, there is a problem of being unable to call it inside the HTML code with Javascript. So I'm confused. What should I do here if I would like to use pure Javascript?
Basically, any JavaScript you use goes inside “<script> your JavaScript </script>”
Hi, I've edited the code according to what you've specified. Unfortunately, the display still does not update according to the desired preferences. I have edited the original post to include the results shown on the browser, along with the codes I have used in the HTML code. Could you advise? Thank you so much for your help
|
0

check out the snippets for getting and setting attributesin an a-frame component. Refer to the following documentation:

https://aframe.io/docs/0.8.0/core/entity.html#getattribute-componentname

It explains very well how to get and how to set values from component properties and sub-properties:

Get Property

enter image description here

Set Property enter image description here

2 Comments

Does this apply in my scenario, considering that I am accessing a local session? I am using some aframe components, however, I am not sure if it works since I am changing a local session on another HTML page. Could you advise if there is an alternative for using local sessions storage?
I don't think templating is available for aframe at component sub-properties level, as they're one string. I think you can modify the values right after initialization of the frame. Not sure how it is done yet!
0

You can’t, but you can change the function to update the color of the sky.

document.getElementById("skyColor").material = `defaultStylesInHere topColor:${localStorage.getItem("skyColor")};`;

Update

let setSkyColor = (val) => {
    localStorage.setItem('skyColor', `defaultStylesInHere topColor:${val};bottomColor:${val}`);
}
let loadSkyColor = () => {
    document.getElementById('skyColor').attributes.material = localStorage.getItem('skyColor');
}

I can make full functions, but it should not be necessary
You could also use JSON or Objects to set and grab sky properties

let app = {
    skyProp: {
        /*
        color: 'rgba(200, 200, 255, 1)',
        OR
        color: {
            default: {
                color: 'rgba(200, 200, 255, 1)',
                topColor: 'green',
            },
            night: {
                color: 'rgba(255, 255, 255, 1)',
                bottomColor: 'rgba(155, 155, 155, 1)',
            }
        }
        */
    }
}

7 Comments

You likely want getAttribute("material") here
Please do not use curly quotes - are you updating on a phone?
You can add comments as comments, no need to edit the post for that.
Yes, I am using a phone, it was stated at the bottom of my post
iPhones do normal quotes if you hold and drag on the quote
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.