01 使用JavaScript原生控制div属性
写在前面:
因对前端开发感兴趣,于是自学前端技术,现在已经会HTML、CSS、JavaScript基础技术。但水平处于小白阶段,在网上找一些小项目练练手,促进自己的技术成长。文章记录自己的所思所想,以及借鉴前端大牛的思路,谨个人想法,存在不足,欢迎指正。
项目介绍:
从最简单的开始,在网上找到了一个简单的用JS控制DIV属性的小项目,咋一看很简单,自己动手之后才发现自己的代码之冗余和初阶,深深汗颜。先写自己想法路程,然后把大牛源码奉上,涉及相关知识点一一记录。
项目效果图

整体思路,先变量保存属性,然后写方法复用,遍历数组,添加方法,对重置的元素用&&判断并使用cssText方法。
不多说,上源码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>控制div的属性</title>
<style>
#outer {
width: 500px;
height: 500px;
margin: 100px auto 0;
padding: 0;
text-align: center;
border: 15px solid #FBB03B;
outline: 15px solid #709080;
border-radius: 1em;
}
h1 {
color: #FBB03B;
}
#div1 {
width: 100px;
height: 100px;
background: #F5F5D5;
margin: 10px auto;
display: block;
}
input {
border: 1px solid #FBB03B;
padding: 8px 20px;
color: #FBB03B;
background: #fff;
font-family: "微软雅黑";
outline: none;
cursor: pointer;
}
input:hover {
background: #FBB03B;
color: #fff;
}
</style>
<script>
// 创建改变样式的函数
var changeStyle = function(elem, attr, value) {
elem.style[attr] = value;
};
window.onload = function() {
// 获取每一个input标签
var oBtn = document.getElementsByTagName("input");
// 获取要改变的div盒子
var oDiv = document.getElementById("div1");
// 建立一个二维数组分别存放每个按钮要改变的属性和属性值
var oAtt = ["width", "height", "background", "display", "display"];
var oVal = ["300px", "300px", "#709080", "none", "block"];
// 遍历input标签
for(var i = 0; i < oBtn.length; i++) {
// 设置对应的index
oBtn[i].index = i;
// 绑定按钮点击事件
oBtn[i].onclick = function() {
// 重置按钮,清空之前的样式
this.index == oBtn.length - 1 && (oDiv.style.cssText = "");
// 调用changeStyle函数,当前按钮点击后,更改对应的样式
changeStyle(oDiv, oAtt[this.index], oVal[this.index]);
}
}
}
</script>
</head>
<body>
<div id="outer">
<h1>控制div属性</h1>
<input type="button" value="变宽">
<input type="button" value="变高">
<input type="button" value="变色">
<input type="button" value="隐藏">
<input type="button" value="重置">
<div id="div1"></div>
</div>
</body>
</html>
1. CSS样式:
实现多重边框,使用outline方案。
在某些情况下,你可能只需要两层边框,可以先设置一层常规边框,再加上outline(描边)属性来产生外层的边框。描边的好处在于,你可以通过outline-offset属性来控制它跟元素的边缘之间的间距,这个属性可以接受负值。
2. JavaScript方法:
cssText()定义和用法:
cssText 属性设置或返回作为字符串的样式声明的内容。this.indexoBtn.length-1 &&(oDiv.style.cssText="");
是指前半句this.indexoBtn.length-1为true时,执行下半句,也就是当遍历到重置按钮时,先清除之前添加的样式
tips:&&和||在javascript中的另类用法
a() && b() :如果执行a()后返回true,则执行b()并返回b的值;如果执行a()后返回false,则整个表达式返回a()的值,b()不执行;
a() || b() :如果执行a()后返回true,则整个表达式返回a()的值,b()不执行;如果执行a()后返回false,则执行b()并返回b()的值;
&& 优先级高于 ||
console.log((1 && 3 || 0) && 4); // 结果4 ①
console.log(1 && 3 || 0 && 4); // 结果3 ②
console.log(0 && 3 || 1 && 4); // 结果4 ③
分析
语句①:1&&3 返回3 => 3 || 0 返回 3 => 3&&4 返回 4
语句②:先执行1&&3 返回3,在执行0&&4返回0,最后执行结果比较 3||0 返回 3
语句③:先执行0&&3 返回0,在执行1&&4返回4,最后执行结果比较 0||4 返回 4
注:非0的整数都为true,undefined、null和空字符串”" 为false。
总结:
这算是最最基础的js练习了,模仿过一遍熟悉了通过js控制css样式改变(不要太懒了,变量名都抄原作的……下次不这样了,囧)。
01 使用JavaScript原生控制div属性的更多相关文章
- 原生Javascript实现控制DIV属性
写在前面: 从事前端工作已有一年之久,因为工作的性质,不太涉及JS方面,所以自己的JS水平一直处于小白阶段,工作闲暇之余,在网上找了一些小项目,希望练练手,促进自己成长.这是第一篇,后续还会有很多记录 ...
- js练习-控制div属性
要开始练练js了,决定先按照Ferris大大的索引表一个个练,头一个就是控制div属性啦.看似挺简单的,不过平时jquery用惯了,用起来原生js还有点手生呢. 总之就是模仿加练习啦,先看看效果: 一 ...
- 控制DIV属性——实现盒子长、宽、背景等变化
写在最前面:Demo的源起来自于http://js.fgm.cc/learn/,但是实现部分都是经过自己思考和优化的,有时会借助别人的图片,然而“窃喜”.如无特殊说明,demo都是经过ie6.ie7等 ...
- 第一课 1) 控制div属性 总结
点击按钮变换属性: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- 控制div属性
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 2016/01/19 javascript学习笔记-name属性
1. name属性只在少数html元素中有效:包括表单.表单元素.<iframe>和<img>元素. 基于name属性的值选取html元素,可以使用document对象的get ...
- JavaScript之控制标签属性
var pic=document.getElementById('pic'); var obtn=document.getElementById('btn'); console.log(pic.get ...
- JavaScript 原生控制元素添加删除
参考: https://blog.csdn.net/leijie0322/article/details/80664554 https://www.cnblogs.com/jpfss/p/910620 ...
- JavaScript动态设置div的样式的方法
有时候需要根据需要动态设置div的样式,当然对于稍有经验的javascript开发者来说,这一切都是那么的简单,但是对于初学者或者说没有相关经验的开发者来说可能就是一个不大不小的难关,下面就通过实例简 ...
随机推荐
- python基础之循环
一.while循环 如果条件成立(true),重复执行相同操作,条件不符合,跳出循环 while 循环条件: 循环操作 (1)while循环示例 例:输入王晓明5门课程的考试成绩,计算平均成绩 i ...
- Java网络编程以及简单的聊天程序
网络编程技术是互联网技术中的主流编程技术之一,懂的一些基本的操作是非常必要的.这章主要讲解网络编程,UDP和Socket编程,以及使用Socket做一个简单的聊天软件. 全部代码下载:链接 1.网络编 ...
- Chrome控制台打印输出彩色调试信息
我们都知道Chrome浏览器在控制台可以通过console.log("Hello");输出调试信息.但是每次打印的内容是黑白的难免有些单调,今天偶然的发现某网站居然能够打印彩色调试 ...
- C#-MVC-★不同层之间的传值方式★
方式一:form表单提交(一对一传值) 例如: view层代码: action - 数据提交到的服务端(如Home控制器下的Insert动作) method - 提交数据的方式(post或get) n ...
- C#-WebForm-Repeater的灵活运用、ItemCommand的用法-增删改查、如何不适用Repeater来展示数据?
浏览器页面: 代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defau ...
- Python抓取远程文件获取真实文件名
用urllib下载远程文件并转存到hdfs服务器,在下载时,下载地址中不一定包含文件名,需要从连接信息中获取. 1 file_url = request.form.get('file_url') 2 ...
- springcloud(五)-Ribbon
前言 先发句牢骚,最近太TM忙了,一直没时间静下心来继续写微服务架构!EMMMMMM..... 经过前文的讲解,我们已经实现了微服务的注册与发现.启动各个微服务时,Eureka Client会把自己的 ...
- android4.0以上访问网络不能在主线程中进行以及在线程中操作UI的解决方法
MONO 调用一个线程操作UI 然后报Only the original thread that created a view hierarchy can touch its views.错误 goo ...
- android studio2.3.3 模拟器 Jni函数调用C++对象,lldb调试this指针和相关变量显示无效的原因
android studio2.3.3 的版本中 Jni函数调用C++对象,对象调用相关的成员函数, lldb调试,变量跟踪窗口,this指针和相关变量显示无效的原因,但这些参数实际是有效的,只是de ...
- Jmeter创建一个点对点的 JMS 测试计划
创建一个点对点的 JMS 测试计划 确保所需的jar文件位于JMeter lib目录中. 如果没有,关闭JMeter,复制jar文件并重新启动JMeter. 参见详细教程 在本节中,将学习如何创建测试 ...