原生JS 实现点击按钮创建元素
要求: 点击按钮,随机生成一个20px-100px宽度正方形,随机颜色,随机位置,不能出可视区域外
思路:(1)创建按钮,为按钮添加事件侦听
(2)触发事件,创建一个元素
(3)设置元素样式,包括大小,位置,颜色
基础HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button>添加</button>
<script> </script>
</body>
</html>
JS代码:
init();
function init() {
var bn = document.getElementById("bn"); //通过id获取按钮bn
bn.addEventListener("click",clickHandler); //为按钮添加点击事件
}
function clickHandler(e) {
var wid = document.documentElement.clientWidth; //获取视口宽度
var hei = document.documentElement.clientHeight; //获取视口高度
var div = document.createElement("div"); //创建一个div
//定义一个局部变量divWidth 存放当前创建的div的大小
var divWidth = Math.floor(Math.random() * 80 + 20);
//设置div的样式,包括 宽 高 定位 背景颜色
div.style.position = "absolute";
div.style.width=divWidth+"px";
div.style.height=divWidth+"px";
//div的位置应该是当前视口宽高减去创建div的宽高 然后取随机值,才能保证div不会超出视口
div.style.left = Math.floor(Math.random() * (wid - divWidth))+"px";
div.style.top = Math.floor(Math.random() * (hei - divWidth))+"px";
div.style.backgroundColor =randomColor();
//将元素添加到body中
document.body.appendChild(div);
}
//定义一个函数,执行返回一个代表颜色的字符串
function randomColor() {
return "#"+Math.floor(Math.random()*0x1000000).toString(16).padStart(6,"0");
}
效果展示:

看完上面的代码,你是不是觉得它看起来有一些 繁杂 也许我们可以将它 “美化” 一下,让代码看起来更漂亮,更加赏心悦目
我们可以将代码中的一些类似的部分摘取出来,用一个函数来完成这些内容,比如为元素添加style 样式
我们可以这么写
// createNewElement 创建一个元素, 函数内有两个参数第一个参数是要创建的元素类型,第二个参数是样式
//通过Object.assign()方法将style内的属性添加给创建的元素的style上
//最后将处理好的元素返回
function createNewElement(elem,style){
var elem=document.createElement(elem);
Object.assign(elem.style,style);
return elem;
}
注: Object.assign(target, source_1, ···)
用于将源对象的所有可枚举属性复制到目标对象中。
我们怎么使用这个函数呢
var elem(用于接收函数return的元素)=createNewElement("div(要创建的元素类型)",{
属性:属性值; //第二个参数为对象,将这个对象传入,并将对象的属性复制到元素的style属性上完成样式的添加.
width:"100px",
backgroundColor:"green"
});
这个函数不仅可以用于这里,还可以用于创建其他元素
init();
function init() {
var bn = document.getElementById("bn"); //通过id获取按钮bn
bn.addEventListener("click",clickHandler); //为按钮添加点击事件
}
function clickHandler(e) {
var wid = document.documentElement.clientWidth; //获取视口宽度
var hei = document.documentElement.clientHeight; //获取视口高度
//定义一个变量divWidth 存放当前创建的div的大小
var divWidth = Math.floor(Math.random() * 80 + 20);
var div=createNewElement("div",{
position : "absolute",
width:divWidth+"px",
height:divWidth+"px",
left: Math.floor(Math.random() * (wid - divWidth))+"px",
top:Math.floor(Math.random() * (hei - divWidth))+"px",
backgroundColor:randomColor()
})
document.body.appendChild(div);
}
// createNewElement 创建一个元素, 函数内有两个参数第一个参数是要创建的元素类型,第二个参数是样式
//通过Object.assign()方法将style内的属性添加给创建的元素的style上
//最后将处理好的元素返回
function createNewElement(elem,style){
var elem=document.createElement(elem);
Object.assign(elem.style,style);
return elem;
}
//定义一个函数,执行返回一个代表颜色的字符串
function randomColor() {
return "#"+Math.floor(Math.random()*0x1000000).toString(16).padStart(6,"0");
}
--
原生JS 实现点击按钮创建元素的更多相关文章
- 原生 js 实现点击按钮复制文本
最近遇到一个需求,需要点击按钮,复制 <p> 标签中的文本到剪切板 之前做过复制输入框的内容,原以为差不多,结果发现根本行不通 尝试了各种办法,最后使了个障眼法,实现了下面的效果 一.原理 ...
- 初探原生js根据json数据动态创建table
初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...
- js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框
转自https://blog.csdn.net/yimawujiang/article/details/86496936 问题:js实现点击按钮时显示弹框,点击按钮及弹框以外的区域时隐藏弹框? 方案一 ...
- win32 htmlayout点击按钮创建新窗口,以及按钮图片样式
最近在做一个C++ win32的桌面图形程序,我不是C++程序员,做这个只是因为最近没什么java的活. windows api,之前接触的时候,还是大学,那时用这个开发打飞机游戏纯粹是娱乐.现在基本 ...
- JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性)
JS(原生js和jq方式)获取元素属性(自定义属性),删除属性(自定义属性) 以下内容: 一.获取元素的属性 二.设置元素的属性 三.删除元素的属性 一.获取元素的属性 1-原生JS 获取属性 .ge ...
- 使用原生js 实现点击消失效果
JQ版 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title ...
- js实现点击按钮传值
js实现点击按钮传值 page1源码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...
- 原生JS实现点击一个按钮显示一个div,再点击按钮div隐藏,或点击除div外其它空白处div隐藏
<!DOCTYPE html> <html style="font-size: 24px"> <head> <title>js点击按 ...
- js点击按钮为元素随机字体颜色和背景色
文章地址 https://www.cnblogs.com/sandraryan/ 写两个button和一个div,点击按钮分别改变背景色和前景色(字体颜色).产生的是一个随机颜色. <!DOCT ...
随机推荐
- 看看有哪些 Web 认证技术.
BASIC 认证 BASIC 认证(基本认证)是从 HTTP/1.0 就定义的认证方式. BASIC 认证会将"用户名:密码"经过 Base64 加密后放入请求头部的 Author ...
- css3 斜切角/斜边的实现方式来自BAT大神的出品
设计图含有斜切角的效果时,我们一般想到的方法是切出四个角为背景,然后用border连起来,这样就能显示出该效果了,那么直接使用css呢?下面就整理css做斜边的效果. 1.方案一:利用linear-g ...
- embedded database (H2, HSQL or Derby), please put it on the classpath
Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded data ...
- UVA11383 Golden Tiger Claw KM算法
题目链接:传送门 分析 这道题乍看上去没有思路,但是我们仔细一想就会发现这道题其实是一个二分图最大匹配的板子 我们可以把这道题想象成将男生和女生之间两两配对,使他们的好感度最大 我们把矩阵中的元素\( ...
- 通过注入DLL修改API代码实现钩取(一)
通过注入DLL修改API代码实现钩取(一) Ox00 大致思路 通过CreateRemoteThread函数开辟新线程,并将DLL注入进去 通过GetProcessAddress函数找到需钩取的API ...
- python 并发专题(十二):基础部分补充(四)协程
相关概念: 协程:一个线程并发的处理任务 串行:一个线程执行一个任务,执行完毕之后,执行下一个任务 并行:多个CPU执行多个任务,4个CPU执行4个任务 并发:一个CPU执行多个任务,看起来像是同时执 ...
- c++运行程序 鼠标点击按钮 (c++)(windows)
简介 这是在黑漆漆的程序中,制造用户可点击的按钮,来决定程序下一步该作什么,的基本代码. 详解 头文件 <cstdio>和<windows.h> 结构体 //这不全别复制 st ...
- Qt_IO系统_文件
主要参考: devbean.net 豆子的博客 参考书:<QtCreator 快速入门>第三版 目录 QFile 如何使用QFile QFile 和QFileInfo Demo 文件操作是 ...
- P1050 精卫填海
[问题描述] 发鸠之山,其上多柘木.有鸟焉,其状如乌,文首,白喙,赤足,名曰精卫,其名自詨.是炎帝之少女,名曰女娃.女娃游于东海,溺而不返,故为精卫.常衔西山之木石,以堙于东海.——<山海经&g ...
- mybatis自动生成代码插件mybatis-generator使用流程(亲测可用)
mybatis-generator是一款在使用mybatis框架时,自动生成model,dao和mapper的工具,很大程度上减少了业务开发人员的手动编码时间 坐着在idea上用maven构建spri ...