Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在js中实现类绑定

如何在js中实现类绑定
EN

Stack Overflow用户
提问于 2021-11-03 22:28:39
回答 1查看 57关注 0票数 0

我刚开始前端,想要实现一个黑暗模式的动画.

当您单击开关(绳子)时,页面将更改主题。

但是我不知道如何使用js来添加动画,比如vue的类绑定。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@keyframes line {
  0% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(100px);
  }
  100% {
    transform: translateY(0);
  }
}

.pull {
  animation: line 0.5s;
}

就像这个在vue(我在网上找到的)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div
  class="switch"
  :class="{ 'pull': inAnimation }"
  @animationend="animationEnd"
  @click="changeTheme"
/>

这是我的密码。

我不知道如何用js来完成它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const sw = document.getElementById('switch');

const changeTheme = () => {
  sw.addEventListener("click", () => {
    sw.className = 'pull';
    if (document.body.className !== "dark") {
      document.body.classList.add("dark");
      localStorage.setItem("css", "dark");
    } else {
      document.body.classList.remove("dark");
      localStorage.removeItem("css");
    }
    sw.className = '';
  });

  if (localStorage.getItem("css")) {
    document.body.className = "dark";
    document.body.classList.add("dark");
  }
  
};

changeTheme();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-03 23:30:00

首先,我看到您忽略了id元素,因为您使用的是getElementById,它必须如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div
  id="switch" <!-- this is missing -->
  class="switch"
  :class="{ 'pull': inAnimation }"
  @animationend="animationEnd"
  @click="changeTheme"
/>

然后,基于是否使用Vue。(如果是Vue,请将代码设置在与上面元素相同的组件中)。

Vue

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script>

export default {
    mounted() {
        const sw = document.getElementById('switch');
        sw.addEventListener("click", () => {
            sw.classList.add('pull');
            if (!document.body.classList.contains("dark")) {
            document.body.classList.add("dark");
            localStorage.setItem("css", "dark");
            } else {
            document.body.classList.remove("dark");
            localStorage.removeItem("css");
            }
            setTimeout(() => {
              sw.classList.remove("pull")
            }, 600);
        });

        if (localStorage.getItem("css")) {
            document.body.classList.add("dark");
        }   
    }
}
</script>

如果Vanilla Js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const sw = document.getElementById("switch");
if (sw) {
  const changeTheme = () => {
    sw.addEventListener("click", () => {
      sw.classList.add("pull");
      if (!document.body.classList.contains("dark")) {
        document.body.classList.add("dark");
        localStorage.setItem("css", "dark");
      } else {
        document.body.classList.remove("dark");
        localStorage.removeItem("css");
      }
      setTimeout(() => {
        sw.classList.remove("pull");
      }, 600);
    });

    if (localStorage.getItem("css")) {
      document.body.classList.add("dark");
    }
  };
  changeTheme();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69835185

复制
相关文章
JS 实现双向数据绑定
近几年前端技术栈真是发展的太迅速了,从以前的针对dom操作的框架如jquery,ext.js等框架逐步过渡到当前的mvvm模式,让前端开发者将注意力从dom操作逐渐解脱出来,专注于逻辑的实现,个人认为开发效率至少提升了1倍,mvvm模式的一个核心便是数据的双向绑定。
grain先森
2019/03/28
2.6K0
JS 实现双向数据绑定
绑定事件中 如可控制函数的执行次数
var flag = true; function onlyOne() { if(flag) { "这里是要执行的代码"; } flag = false//该方法是控制函数仅执行一次 因为flag是全局变量 onlyOne()函数执行一次后flag就变成false了 函数就执行不了了
大当家
2018/06/28
2.3K0
如何在原生微信小程序中实现数据双向绑定
官网:https://qiu8310.github.io/minapp/ 作者:Mora 在原生小程序开发中,数据流是单向的,无法双向绑定,但是要实现双向绑定的功能还是蛮简单的! 下文要讲的是小程序框架 minapp 中实现双向绑定的原理,在 minapp 中,你只需要在 wxml 模板中给组件的属性名后加上 .sync 就可以实现双向绑定。下面为了解释其原理,过程可能会说的稍微复杂些,但其实 minapp 框架已经处理了那些繁杂的细节! 首先,要使数据双向绑定,应该避免过多的数据源。 在数据从上到
iKcamp
2018/03/30
2.9K0
如何在原生微信小程序中实现数据双向绑定
js中绑定事件与解除绑定事件的3种方式
方式一: btn.onclick = function (){ console.log("123"); }; btn.onclick = function (){ console.log("345");//只能打印这一个结果 }; 解除: btn.onclick = null; 方式二:谷歌 火狐支持 ie8不支持 btn.addEventListener("click",function(){ console.log("123")
用户4344670
2019/08/28
18.8K1
原生js实现vue的数据双向绑定
写在前面 很多面试官在面试的时候为了显示自己很牛,喜欢问面试者,你会不会使用原生js实现vue的双向绑定啊,每次我遇到这种面试官我都想揍他一顿,不是说这个问题问得不好,我就想问问,我会或者不会影响我使用vue吗?如果真的是使用原生的话,需要这种功能吗?如果使用vue的话,需要知道吗?但是很多面试官还是会问,所以这里我还是给大家写一下,其实没有想象的那么的难! 简单的分析一波 所谓的双向绑定就是这边输入数据的时候,另一个dom节点可以时刻监听到这个数据的变化,并且做出相应的操作,最简单的操作就是输入什
何处锦绣不灰堆
2021/07/19
1.8K0
原生js实现vue的数据双向绑定
如何在js中创建对象
七夕临近了,没有对象的来创建一个吧 使用对象字面量: const o = { name: "zehan", greeting() { return `Hi, 我是${this.name}`; } }; o.greeting(); // "Hi, zehan" 使用构造函数: function Person(name) { this.name = name; } Person.prototype.greeting = function () { return `Hi, 我是
ZEHAN
2020/09/23
7.6K0
Strve.js实现简单的数据双向绑定
用过Vue的小伙伴都知道,v-model指令可以实现数据双向绑定。双向绑定除了数据驱动 DOM 外, DOM 的变化反过来影响数据,是一个双向关系。
Vam的金豆之路
2022/06/11
1.2K0
Strve.js实现简单的数据双向绑定
如何在chrome中实时修改JS
有时候,我们需要去研究人家网站的运行机制,这就免不了要在他们的前端脚本里插入一些调试代码看看运行效果。在chrome65以前,我们可以打开目标网页的开发者工具—source选项卡—目标JS/CSS文件,然后在相关位置写入代码保存后即可看到改动后的效果。chrome65之后需要进行本地代码替换,本文就介绍一下如何在chrome中用本地代码替换在线代码,以达到在线修改JS的效果。
流量黑客
2020/01/02
38.1K2
如何在chrome中实时修改JS
如何在页面中引入JS教程
须位于 <script> 与 </script> 标签之间,放置在 HTML 页面的 <body> 或者 <head> 标签中:
小小鱼儿小小林
2020/06/23
5.5K0
如何在 JS 中“深冻结”对象?
1.如果咱们想要确保对象被深冻结,就必须创建一个递归函数来冻结对象类型的每个属性:
程序狗
2021/09/15
1.7K0
【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
Activity 获取布局组件方式 : 在之前的 Activity 代码中 , 使用 findViewById ( ) 方法 , 或者 Butter Knife 的 @BindView 注解方式获取 Layout 布局中的组件对象 ;
韩曙亮
2023/03/27
1.2K0
【JetPack】ViewBinding 视图绑定组件 ( 启用模块 | 视图绑定定制 | 绑定类名称生成规则 | 绑定类字段生成规则 | 绑定类获取根视图 | 绑定类获取布局组件 )
JS中Class类的详解
    在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类。它可以被看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。     类实际上是个“特殊的函数”,就像你能够定义的函数表达式和函数声明一样,类语法有两个组成部分:类表达式和类声明。
全栈程序员站长
2022/09/05
4.4K0
如何在 Ubuntu 中创建网络绑定和桥接?
在 Ubuntu 操作系统中,创建网络绑定和桥接是一种常见的网络配置方式,它允许多个网络接口协同工作,提供更高的网络性能和可用性。本文将详细介绍如何在 Ubuntu 中创建网络绑定和桥接,以便您能够轻松地配置和管理网络连接。
网络技术联盟站
2023/08/03
8280
如何在 Ubuntu 中创建网络绑定和桥接?
如何在 Ubuntu 中创建网络绑定和桥接?
在 Ubuntu 操作系统中,创建网络绑定和桥接是一种常见的网络配置方式,它允许多个网络接口协同工作,提供更高的网络性能和可用性。本文将详细介绍如何在 Ubuntu 中创建网络绑定和桥接,以便您能够轻松地配置和管理网络连接。
网络技术联盟站
2023/07/14
9590
WPF 如何在绑定失败异常
在开发 WPF 程序,虽然 xaml 很好用,但是经常会出现小伙伴把绑定写错了。因为默认的 VisualStudio 是没有自动提示,这时很容易复制粘贴写出一个不存在的属性。 在 xaml 如果绑定失败了,那么内部会有一个异常,但是 WPF 不会把这个异常抛出来,这个异常也不会让用户拿到,只是会在输出窗口提示。但是异常会影响性能,而且会让界面和设计的不一样,所以我就想在找到绑定异常就抛出,弹出窗口告诉小伙伴。 本文会告诉大家如何找到绑定失败,并且抛出异常,如何防止修改属性名让xaml绑定失败。
林德熙
2022/08/04
1.3K0
爬虫|如何在Pycharm中调试JS代码
最终调试完需要将相关代码拿到本地,因为最终是在本地环境执行。这时候可能又会遇到各种参数未定义等报错
Python编程与实战
2020/05/29
3K0
WPF 如何在绑定失败异常
在开发 WPF 程序,虽然 xaml 很好用,但是经常会出现小伙伴把绑定写错了。因为默认的 VisualStudio 是没有自动提示,这时很容易复制粘贴写出一个不存在的属性。 在 xaml 如果绑定失败了,那么内部会有一个异常,但是 WPF 不会把这个异常抛出来,这个异常也不会让用户拿到,只是会在输出窗口提示。但是异常会影响性能,而且会让界面和设计的不一样,所以我就想在找到绑定异常就抛出,弹出窗口告诉小伙伴。 本文会告诉大家如何找到绑定失败,并且抛出异常,如何防止修改属性名让xaml绑定失败。
林德熙
2018/09/19
2.3K0
WPF 如何在绑定失败异常
Vue.js动态绑定class,实现各色花式需求
在上面的语法中,active是class的名字,isActive是一个控制class动态展示的boolean值。当然以上是对象控制class最简单的用法。
我的小熊不见了丶
2019/05/22
2.5K0
点击加载更多

相似问题

如何在ActionScript类中实现数据绑定?

34

如何在react.js中实现单向绑定?

12

如何在vue.js中绑定类?

113

如何在backbone.js中实现双向HTML绑定?

11

如何在batman.js中绑定多个类?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文