JavaScript 30 - 3 学习笔记
今天学习的是JavaScript 30-3 ---css Variables
实现的效果如下图所示。

废话不多,我们直接来看代码。
html:
<h1>大家好,这个一个<span class="h1">标题</span></h1>
<div class="controls">
<label for="spacing">背景后面的空间:</label>
<input type="range" name="spacing" min="10" max="200" value="10" data-sizing="px"> <label for="blur">虚化程度:</label>
<input type="range" name="blur" min="0" max="25" value="3" data-sizing="px"> <label for="base">背景颜色:</label>
<input type="color" name="base" value="#dcaddc"> </div> <img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1504347299000&di=436a85e236633c3eced53b98620e2992&imgtype=0&src=http%3A%2F%2Fimg.qqzhi.com%2Fupload%2Fimg_5_3163712707D1742949080_23.jpg">
本次使用了 input标签的 range 和 color ,两个小白接触不多的type吧:
两个有意思的type。附带两个链接,大家可以去详细阅读以下这两个type的使用方法。
我们分别为 三个input 设置了他们的初始value 为两个range 设置了 min 和max 的值,并且增加了data-sizing。
这个data-sizing 是为了js代码而特别增加的。
接下来我们来看看css。
:root{
--base:#dca;
--spacing:10px;
--blur:3px;
}
img{
padding: var(--spacing);
background-color: var(--base);
filter: blur(var(--blur));
}
.h1{
color: var(--base);
background-color: rgb(22,33,44);
}
css里的代码很少,但是这次课程用到了css的新东西!
CSS变量
CSS 变量是由CSS作者定义的实体,其中包含要在整个文档中重复使用的特定值。使用自定义属性来设置变量名,并使用特定的 var()来访问。(比如 color: var(--main-color);)。
我们使用了:root 选择器,来定义了三个css变量。 css变量的定义方法是:
element {
--main-bg-color: brown;
}
使用的方法是
element {
background-color: var(--main-bg-color);
}
因此我们定义了三个变量:--base ,--spacing , --blur。
有了变量之后,我们只需要找到此变量,然后对他进行修改,就可以修改所有css中用到这个变量的地方啦!
js代码展示了如何修改他们的方法:
const inputs = document.querySelectorAll('.controls input');
const h = document.querySelector('.h1');
function handleUpdate(){
const suffix = this.dataset.sizing || '';
document.documentElement.style.setProperty(`--${this.name}`,this.value + suffix);
}
inputs.forEach(input => input.addEventListener('change',handleUpdate));
inputs.forEach(input => input.addEventListener('mousemove',handleUpdate));
const 和 字符串模版的使用大家可以去看我的第一篇文章 JavaScript30-1,
顺便补充一下第一篇文章没有写清楚的箭头函数: =>
在上面这段代码中,我们可以看到
inputs.forEach(input => input.addEventListener('change',handleUpdate));
其实这段代码就等同于:
inputs.forEach(
function(input){
input.addEventListener('change',handleUpdate);
}
);
也就是箭头函数的使用方法:
基本用法
ES6 允许使用“箭头”(
=>)定义函数。var f = v => v;上面的箭头函数等同于:
var f = function(v) {
return v;
};
接下来就让我们来看看这个效果实现的核心原理吧:
function handleUpdate(){
const suffix = this.dataset.sizing || '';
document.documentElement.style.setProperty(`--${this.name}`,this.value + suffix);
}
我们的handleUpdate() 是在input 改变的时候执行的,也就是指,this指向的其实就是我们鼠标所选中的那个控件,所以我们可以直接使用dataset.sizing 来获取到 data-sizing 的值。
当然 ,还有其他的方法可以获取到data-sizing的值。 例如 getAttribute("data-sizing"); 也可以获取到 data-sizing的值。
这里还使用了另外一个方法: setProperty()
style.setProperty(propertyName, value, priority);
它接受三个参数:
propertyNameis aDOMStringrepresenting the CSS property name to be modified.valueOptional is aDOMStringcontaining the new property value. If not specified, treated as the empty string.
- Note:
valuemust not contain"!important"-- that should be set using thepriorityparameter.priorityOptional is aDOMStringallowing the "important" CSS priority to be set. If not specified, treated as the empty string.
这是我在mdn上查到的,
propertyName 就是指 css 样式的名字,他使用的是原生css样式名字,并不需要对css样式名进行转化 例如 background-color 不需要转化为 backgroundColor。
value则是改变后的值。
priority 一般不写,这是用来设置样式为important 的..
因为我们要找到的是css的变量,所以采用这种方法可以直接找到css的变量,并且对其进行修改。
这些就是本次课程我学到的新内容,哈哈。
JavaScript 30 - 3 学习笔记的更多相关文章
- JavaScript 30 - 1 学习笔记
学习JavaScirpt30的笔记! ...虽然英语不是很好,但是跟着来还是学到了一些东西. 1-------> JavaScirpt Drum Kit 功能是这样的 ,敲击键盘上面的按钮, ...
- JavaScript 30 - 2 学习笔记
学习JavaScirpt30的笔记! 有意思! 2-------> CSS clock 效果是这样的.... 这是改良过后的 版本.... 话不多说,直接来看代码. 首先是html部分 &l ...
- ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录
放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- JavaScript 权威指南-学习笔记(一)
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! ## JavaScript 权威指南-学 ...
- ArcGIS API for JavaScript 4.2学习笔记[1] 显示地图
ArcGIS API for JavaScript 4.2直接从官网的Sample中学习,API Reference也是从官网翻译理解过来,鉴于网上截稿前还没有人发布过4.2的学习笔记,我就试试吧. ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十一)
1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...
- JavaScript权威设计--JavaScript函数(简要学习笔记十)
1.函数命名规范 函数命名通常以动词为前缀的词组.通常第一个字符小写.当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()". 还有一种就是"lik ...
- 《你不知道的 JavaScript 上卷》 学习笔记
第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法 ...
随机推荐
- SecureCRT远程连接虚拟机CentOS的三种方式
当在VMware虚拟机中将CentOS安装成功后,会在win7系统中模拟出两个虚拟网卡:VMnet1和VMnet8,我们来查看一下,点击“控制面板—>查看网络状态和任务—>更改适配器设置” ...
- 如何理解Web应用程序的MVC模型?
View,也就是视图/视野,是你真正看到的,而非想象中的 Model.Controller,也就是控制器,是你用来改变 Model 方式.简单的说 Controller 和 View 分别是 Mode ...
- 如何在Flask的构架中传递logger给子模块
Logger的传递 作为一个新手,如何将主函数的logger传入子模块是一件棘手的事情.某些情况下可以直接将logger作为参数传入子模块的构造函数中,但倘若子模块与主模块存在相互依赖的关系则容易出现 ...
- Google浏览器如何加载本地文件
Chrome浏览器加载本地文件 一般来说,为了安全起见,浏览器是不能通过load方法来加载本地文件的,load方法只能加载远程服务器上的文件. 在浏览器默认的情况下,试图加载一个本地文件,会出现交叉域 ...
- 使用 Multipath TCP 为 iOS 创建备份连接(转)
这篇文章的英文版如下: https://support.apple.com/en-us/HT201373 这里咱们采用苹果手机打开测试网站,发现没有检测到MPTCP,初步猜想可能需要打开什么设置,后续 ...
- 爬虫代码实现四:采用Hbase存储爬虫数据(2)
导入hbase的jar包,在maven仓库找:进入http://mavenrepository.com/,输入hbase client,选择apache hbase client, 点击进入,选择 点 ...
- http协议之基础概念篇(1)
内容概述: 该篇主要内容概述 a.http相关术语解析 b.http的基本原理与工作流程 c.相关工具的使用(Wireshark) 作用介绍 绝大多数的web开发,都是构建在http协议之上的. HT ...
- 201621123016 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- Lightoj1081【500棵线段树维护】
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N=5e2+10; const ...
- 2016四川省赛A,C【写了1w个if的水题】
A题: #include <iostream> #include <stdio.h> #include <string.h> #include <algori ...