Css&JS实现一键背景切换

Css & Js背景切换

本次效果参照yao大叔写前端很帅 实现 跟着yao大叔学习有饭吃

本次实现需要对于小白来说需要注意

一:Link属性

要使其成为替代样式表,请将单词“ alternate”添加到rel属性。
要使其成为首选样式表,请添加title属性:
什么都不加就是持久样式

二:

我们在使用自定义属性时最好以data开头 data-xxx 然后我们在后面获取这个属性时通过dataset.xxx获取

源码

index

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>点击按钮改变背景</title>
    <!--
       知识点一:
       要使其成为替代样式表,请将单词“ alternate”添加到rel属性。
       要使其成为首选样式表,请添加title属性:
       什么都不加就是持久样式
       
     -->
    <link rel="stylesheet" href="./css/reset.css" />
    <!-- 首选样式 有title 没有 alternate -->
    <link
      rel="stylesheet"
      href="./css/themem-black.css"
      title="默认是黑色"
      data-color="black"
    />
    <!-- 备用样式 有disable 我们让他上来不要加载 后期我们通过js来把disable切换为true就能用了 在加一个alternate让他成为替代样式-->
    <!-- 注意这里如果alternate 也有title 默认禁用 是可以选择 但是这里一定要加上 disable才能生效 -->
    <!-- 注意我们需要在吧disabled干掉以后我们需要让干掉的样式设置为首选样式所以我们每个样式都要加上title  -->
    <link
      rel="stylesheet alternate"
      href="./css/themem-blue.css"
      disabled
      data-color="blue"
      title="蓝色"
    />
    <link
      rel="stylesheet alternate"
      href="./css/themem-red.css"
      disabled
      data-color="red"
      title="红色"
    />
    <link
      rel="stylesheet alternate"
      href="./css/themem-white.css"
      disabled
      data-color="white"
      title="白色"
    />
    <!-- 
      在上面的样式中我们每一个都给他加上一个自定义属性 data-color="xxx" 主要目的是我们后期通过js获取的时候有个判断的条件
     -->
  </head>
  <body>
    <div class="container">
      <!-- 
        section是h5 的语义化标签 
        一个 section 元素通常由内容以及标题组成,表示一个内容区块。
        理解:
        section中可以包含h1h1、h2…h6标签,表示文档结构
        section标签用于标识页面上重要内容部分
        该标签类似将一本书分成几个章节
       -->
      <section class="title">效果至上</section>
      <section class="switch-btns">
        <!-- 
          这里也有一些自定义属性 后期js好判断一点
         -->
        <div class="btn white" data-color="white"></div>
        <div class="btn black" data-color="black"></div>
        <div class="btn blue" data-color="blue"></div>
        <div class="btn red" data-color="red"></div>
      </section>
    </div>
    <script src="./index.js"></script>
  </body>
</html>

Js

// 获取一些document对象
const doc = document;
// 获取一下主题树
const themes = [
  doc.querySelector('link[data-color="blue"]'),
  doc.querySelector('link[data-color="black"]'),
  doc.querySelector('link[data-color="red"]'),
  doc.querySelector('link[data-color="white"]'),
  //查询页面中的link含有data-color="xxx"的标签 因为我们要把他的disable改变为true
];
// 获取一下按钮
const btns = doc.querySelectorAll(".btn");
btns.forEach((btn) => {
  btn.addEventListener("click", (e) => {
    // getAttribute()方法用于获取xxx属性值
    const theme = btn.getAttribute("data-color");
    // 这里我们来调用一下window上的方法来切换我们的主题
    this.SwitchThemeColor(theme);
    console.log(theme);
  });
});

function SwitchThemeColor(theme) {
  themes.forEach((LinkTheme) => {
    console.log(LinkTheme);
    if (LinkTheme.dataset.color === theme) {
      // 这里呢我们根据我们的自定义属性来判断点击的是什么颜色
      LinkTheme.disabled = false;
    } else {
      LinkTheme.disabled = true;
    }
  });
}

Reset

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  min-height: 100vh;
  /*
   vh是css中的一个相对长度单位,相对于视窗的高度, 视窗被均分为100单位的vh,即1vh永远等于当前视窗高度的百分之一。
  视窗被均分为100单位的vh。vh 优势在于能够直接获取高度,而用 % 在没有设置 body 高度的情况下,是无法正确获得可视区域的高度的。
  视区所指为浏览器内部的可视区域大小, 即window.innerWidth/window.innerHeight大小,不包含任务栏标题栏以及底部工具栏的浏览器区域大小。
  因此,100vh就等于当前浏览器的视窗高度,即浏览器内部的可视区域的高度大小。
  设置height:100vh,不论元素没有内容,该元素都会被撑开与屏幕高度一致 
   */
  display: flex;
  align-items: center;
  justify-content: center;
  /* 这里的布局我第一次见我们给body设置直接让所有元素都能剧中 */
  transition: background-color 0.5s ease-in-out;
  /* 这里给他一个动画效果让他后期切换顺滑一点---效果至上 */
}
.container .title {
  text-align: center;
  font-size: 32px;
  font-weight: 700px;
  letter-spacing: 2px;
  /* 不想让用户选中 */
  user-select: none;
  transition: color 0.5s ease-in-out;
}
.container .switch-btns {
  /* 让他变一下flex布局要不然他是块元素不能在一行 */
  display: flex;
  margin-top: 32px;
}
.container .switch-btns .btn {
  width: 50px;
  height: 50px;
  border-radius: 50%;
  user-select: none;
  cursor: pointer;
  margin-left: 5px;
}
.container .switch-btns .white {
  background-color: white;
}
.container .switch-btns .black {
  background-color: black;
}

.container .switch-btns .blue {
  background-color: blue;
}

.container .switch-btns .red {
  background-color: red;
}

还有四个背景颜色和文字颜色自己定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值