html 我如何从addEventEvent返回一个值以便被另一个对象使用

lx0bsm1f  于 2023-11-15  发布在  其他
关注(0)|答案(3)|浏览(171)

我想做的是三个滑块,可以在div改变时改变颜色。每个滑块都可以,我可以在控制台中检查值的变化。我遇到的挑战是,当我试图在事件列表之外分配值时,它不会改变任何东西。
下面是该项目的简单代码:

  1. var redslider = document.getElementById('r')
  2. var greenslider = document.getElementById('g')
  3. var blueslider = document.getElementById('b')
  4. //the above will take slider and have them as variables
  5. const changebg = document.getElementById('rangeValue')
  6. var red = ''
  7. var green = ''
  8. var blue = ''
  9. redslider.addEventListener('input', (e) => {
  10. console.log(`the value of red is ${redslider.value}`)
  11. // redslider.value = red
  12. })
  13. greenslider.addEventListener('input', (e) => {
  14. console.log(`the value of green is ${greenslider.value}`)
  15. // greenslider.value = green
  16. })
  17. blueslider.addEventListener('input', (e) => {
  18. console.log(`the value of blue is ${blueslider.value}`)
  19. // blueslider.value = blue
  20. })
  21. changebg.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`;
  1. body {
  2. height: 100vh;
  3. width: 100vw;
  4. display: flex;
  5. justify-content: center;
  6. align-items: center;
  7. position: relative;
  8. }
  9. .maincontainer {
  10. width: 50%;
  11. height: 50%;
  12. border-radius: 20px;
  13. background: hsla(22, 100%, 78%, 1);
  14. background: linear-gradient(90deg, hsla(22, 100%, 78%, 1) 0%, hsla(19, 95%, 76%, 1) 13%, hsla(17, 94%, 75%, 1) 32%, hsla(2, 78%, 62%, 1) 100%);
  15. background: -moz-linear-gradient(90deg, hsla(22, 100%, 78%, 1) 0%, hsla(19, 95%, 76%, 1) 13%, hsla(17, 94%, 75%, 1) 32%, hsla(2, 78%, 62%, 1) 100%);
  16. background: -webkit-linear-gradient(90deg, hsla(22, 100%, 78%, 1) 0%, hsla(19, 95%, 76%, 1) 13%, hsla(17, 94%, 75%, 1) 32%, hsla(2, 78%, 62%, 1) 100%);
  17. display: flex;
  18. justify-content: center;
  19. align-items: center;
  20. flex-direction: column;
  21. gap: 20px;
  22. }
  23. .slider {
  24. display: flex;
  25. justify-content: center;
  26. align-items: center;
  27. border-radius: 20px;
  28. width: 70%;
  29. height: 50px;
  30. background: white;
  31. }
  32. .slider input {
  33. width: 90%;
  34. }
  35. .valuee {
  36. position: absolute;
  37. width: 200px;
  38. height: 200px;
  39. top: 40px;
  40. left: 50px;
  41. /* background-color: rgba(43, 46, 43,0.5); */
  42. border: 2px solid black;
  43. border-radius: 10px;
  44. display: flex;
  45. justify-content: center;
  46. align-items: center;
  47. }
  1. <div class="maincontainer">
  2. <div class="slider">
  3. <input type="range" min="0" max="255" value="50" id="r">
  4. <!-- <p id="rangeValue">100</p> -->
  5. </div>
  6. <div class="slider">
  7. <input type="range" min="0" max="255" value="50" id="g">
  8. <!-- <p id="rangeValue">100</p> -->
  9. </div>
  10. <div class="slider">
  11. <input type="range" min="0" max="255" value="50" id="b">
  12. <!-- <p id="rangeValue">100</p> -->
  13. </div>
  14. <div class="valuee" id="rangeValue">100</div>
  15. </div>

正如你可以从上面看到我把红色,蓝色和绿色变量为空,因为我想他们改变时,滑块输入改变.然后我给变量的值,例如blueslider.value = blue它不工作,滑块甚至拒绝改变后,最初的幻灯片.我希望帮助理解所有这些.谢谢.
这里是fiddle

fkvaft9z

fkvaft9z1#

当你修复了移动这些指针时-JS中有一个问题。
我创建了一个函数,它将更新背景颜色和valueediv中的文本

  1. var redslider = document.getElementById('r')
  2. var greenslider = document.getElementById('g')
  3. var blueslider = document.getElementById('b')
  4. const changebg = document.getElementById('rangeValue');
  5. //getting values from sliders set by default
  6. var red = redslider.value;
  7. var green = greenslider.value;
  8. var blue = blueslider.value;
  9. function updateValueElement() {
  10. changebg.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`;
  11. changebg.textContent = `${red}, ${green}, ${blue}`;
  12. }
  13. redslider.addEventListener('input',(e)=>{
  14. console.log(`the value of red is ${redslider.value}`);
  15. red = redslider.value;
  16. updateValueElement();
  17. })
  18. greenslider.addEventListener('input',(e)=>{
  19. console.log(`the value of green is ${greenslider.value}`)
  20. green = greenslider.value;
  21. updateValueElement();
  22. })
  23. blueslider.addEventListener('input',(e)=>{
  24. console.log(`the value of blue is ${blueslider.value}`)
  25. blue = blueslider.value;
  26. updateValueElement();
  27. })
  28. //changing text in valuee div and its background on load
  29. updateValueElement();

字符串

展开查看全部
pbpqsu0x

pbpqsu0x2#

你不会从事件监听器中返回一个值。没有任何东西需要这个值,也没有任何东西会使用这个值。
听起来你想做的是在事件侦听器中更改元素的backgroundColor。请注意你是如何在事件侦听器之外做的:

  1. blueslider.addEventListener('input',(e)=>{
  2. console.log(`the value of blue is ${blueslider.value}`)
  3. // blueslider.value = blue
  4. })
  5. changebg.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`;

字符串
如果你想在事件侦听器中执行此操作,你可以:

  1. blueslider.addEventListener('input',(e)=>{
  2. console.log(`the value of blue is ${blueslider.value}`);
  3. // blueslider.value = blue;
  4. changebg.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`;
  5. });
  6. changebg.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`;


您可能还希望在使用变量之前更新它们,例如:

  1. blueslider.addEventListener('input',(e)=>{
  2. console.log(`the value of blue is ${blueslider.value}`);
  3. blue = blueslider.value; // here
  4. changebg.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`;
  5. });


将这些变量初始化为非空值(与输入中的值相同)可能也是一个好主意,因此backgroundColor的初始设置是有效的:

  1. var red = '50';
  2. var green ='50';
  3. var blue = '50';

展开查看全部
beq87vna

beq87vna3#

所以我想你应该在每次触发事件时更新背景颜色(blueslider,redslider或greenslider),所以首先你需要更新全局变量red,蓝色和绿色,每次事件触发到滑块的值时,您将从输入中获取,然后创建一个新函数来更新changebg.style.backgroundColor = rgb(${red}, ${green}, ${blue})此值,并在每次触发任何相应事件时调用该函数。
例如``
`

  1. blueslider.addEventListener('input',(e)=>{
  2. console.log(`the value of blue is ${blueslider.value}`);
  3. blue = blueslider.value;
  4. //our new function
  5. change_background();
  6. });
  7. change_background(){
  8. changebg.style.backgroundColor = `rgb(${red}, ${green}, ${blue})`;
  9. }

`个

展开查看全部

相关问题