【问题标题】:Random toggle between classes on page load页面加载时类之间的随机切换
【发布时间】:2016-01-17 20:54:40
【问题描述】:

我将我的网站分成 50/50%,每个都有自己的外观和信息。我有一个 css 类,它可以使两边向左或向右浮动取决于它的设置。我想要一个小脚本 类之间的随机切换,以便页面加载和向左或向右切换。

现在的 CSS 类:

.left-wrapper,
.right-wrapper {
  position: relative;
  float: left;
  width: 50%;
}

我正在考虑在两个类之间切换:

.left-wrapper-1,
.right-wrapper-1 {
  position: relative;
  float: left;
  width: 50%;
}


.left-wrapper-2,
.right-wrapper-2 {
  position: relative;
  float: right;
  width: 50%;
}

Javascript 不工作:

window.onload = function() {
     $('.left-wrapper-1').toggleClass('left-wrapper-2');
     $('.right-wrapper-1').toggleClass('right-wrapper-2');
};

【问题讨论】:

  • 打开您的控制台并检查 javascript 错误。我有一种感觉,您没有将 jQuery 库包含到您的项目中。
  • 你有什么错误吗?
  • 当浮动设置为左侧时,它看起来像红色/黑色,当我将其设置为右侧时,它是黑色/红色时,您必须看到它。只有上面的脚本在重新加载等时不会在它们之间随机切换。
  • 我们仍然必须知道您遇到了哪些错误(如果有)。

标签: javascript html css onload


【解决方案1】:

我理解你的问题,就这样试试吧:

window.onload = function() {
   $('.left-wrapper-1').toggleClass('left-wrapper-1 left-wrapper-2');
   $('.right-wrapper-1').toggleClass('right-wrapper-1 right-wrapper-2');
};

它将从具有 left-wrapper-1 类的元素中删除类 left-wrapper-1 并添加 left-wrapper-2

第二个相同:
它将从具有 right-wrapper-1 类的元素中删除类 right-wrapper-1 并添加 right-wrapper-2

$.toggleClass :将删除(...) 中存在的类并添加不存在的类!

希望对你有帮助。


编辑:在 cmets 和澄清之后,

$('button').click(function() {
  // the random part is here
  var id = Math.floor( Math.random() * 2 ) + 1;
  // just for debug
  $('#dbg').append('<div>' + id + '</div>');


     $('.left-wrapper').toggleClass('left-wrapper-' + id);
     $('.right-wrapper').toggleClass('right-wrapper-' + id);

});
.left-wrapper,
.right-wrapper {
  position: relative;
  float: left;
  width: 50%;
}

.left-wrapper-1,
.right-wrapper-1 {
  position: relative;
  float: left;
  width: 50%;
  background : red;
}


.left-wrapper-2,
.right-wrapper-2 {
  position: relative;
  float: right;
  width: 50%;
  background : black;
  color : #FFF;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='left-wrapper'>A</div>
<div class='right-wrapper'>B</div>
<button>click me</button>
<div id='dbg'></div>

【讨论】:

  • 感谢您的帮助,但重新加载时不会在它们之间随机切换,所以我只看到黑色/红色,加载时看不到反之亦然。
  • 因为使用 toggleClass 没有随机属性!我不明白你想达到什么目的,你能准确解释一下吗?
  • 真的很简单,我的网站设计分为 50%/50% 红色/黑色红色=.left-wrapper 和黑色=right-wrapper。我知道当我手动将两个类的浮点值更改为向右时,它会变成黑色/红色,我唯一想要实现的就是在加载页面上随机执行此操作。
  • @Pallum:好的!我已经添加了一个像你想要的那样工作的 sn-p,检查它并告诉我!
  • 谢谢你的代码看起来很棒,但我希望它在加载页面上。它看起来类似于 @ryanpcmcquen 现在为我工作的代码
【解决方案2】:

你那里的当前 JS 不会做随机切换。它只会找到类为 .left-wrapper-1 的元素,并添加一个类为 .left-wrapper-2。

你需要更多这样的东西:

$(document).ready(function(){
    // This is a ternary operator, which is just a shorthand way to 
    // do an if/else statement. This basically says, if the random number
    // is less than .5, assign "1" to the scenario variable.
    // if it is greater (or equal to), assign "2" to the variable. 
    var scenario = Math.random() < .5 ? "1" : "2"; 

    $(".left-wrapper").addClass("left-wrapper-" + scenario); 
    $(".right-wrapper").addClass("right-wrapper-" + scenario); 

}); 

【讨论】:

  • 我喜欢这个答案。如果要使用它,请确保将 divs 初始类设置为 left-wrapperright-wrapper(不是 left-wrapper-1right-wrapper-1)。
  • 这应该是选择的答案。
  • 好调用,我注意到在 CSS 中看起来确实已经分配了这些类,但是您要确保这些样式未应用于这些“默认”类。我们真的只想为了能够选择这些元素而使用它们。更改的样式应仅分配给 .left-wrapper-1、.left-wrapper-2,对于 .right-wrapper-1 和 .right-wrapper-2 也是如此。
【解决方案3】:

你是这个意思吗?

// set a variable and give it a random boolean value
var myRandom = !Math.floor( Math.random() * 2 );

// if true (or false), toggle classes
$(document).ready(function(){
    if (myRandom) {
        $('.left-wrapper-1').toggleClass('left-wrapper-1 left-wrapper-2');
        $('.right-wrapper-1').toggleClass('right-wrapper-1 right-wrapper-2');
    };
});
【解决方案4】:

这是@KennyFellows 答案的纯 JavaScript 版本:

https://jsfiddle.net/ryanpcmcquen/LwqL1ep1/

window.addEventListener('load', function() {
  // This is a ternary operator, which is just a shorthand way to 
  // do an if/else statement. This basically says, if the random number
  // is less than .5, assign "1" to the scenario variable.
  // if it is greater (or equal to), assign "2" to the variable. 
  var scenario = Math.random() < .5 ? "1" : "2";

  document.querySelector(".left-wrapper").classList.add("left-wrapper-" + scenario);
  document.querySelector(".right-wrapper").classList.add("right-wrapper-" + scenario);

});
.left-wrapper-1,
.right-wrapper-1 {
  position: relative;
  float: left;
  width: 50%;
}
.left-wrapper-2,
.right-wrapper-2 {
  position: relative;
  float: right;
  width: 50%;
}
<div class="left-wrapper">1</div>
<div class="right-wrapper">2</div>

【讨论】:

  • 真的很喜欢你认为它还行不通的方式。
  • @Pallum 成功了,点击'Run code sn-p'多次,它将交换1和2 ...
  • 确实如此!我对另一个类似的代码感到困惑。谢谢!
猜你喜欢
  • 2016-08-04
  • 2019-03-17
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2015-04-09
相关资源
最近更新 更多