indexhtml的代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=f, initial-scale=1.0">
<title>Document</title>
<style>
html {
min-height: 100%;
background: #172f38;
color: #d7dbdd;
margin: 0;
padding: 20px;
cursor: pointer;
box-sizing: border-box;
}
body {
margin: 0;
}
.container span {
float: left;
min-width: 2em;
margin-right: 10px;
}
.center {
position: fixed;
left: 50%;
top: 50%;
font-size: 8em;
color: rgba(255, 255, 255, .7);
transform: translate(-50%, -50%);
/* 针对opactiy,变化函数使用ease-in,延迟0.3s变化,变化时在0.7s完成
针对其他css属性,变化函数使用ease-in,变化总时间1s
*/
transition: all 1s ease-in, opacity 0.7s ease-in 0.3s;
transform: translate();
}
</style>
</head>
<body>
<div id="divContainer" class="container">
</div>
<div id="divCenter" class="center">
</div>
<!--此处引入的是经过webpack一系列操作后的生产环境js代码 -->
<script src="./main.js"></script>
</body>
</html>
没有经过webpack 一系列操作的js源码
工程目录如下 此时安装的依赖包为 jQuery, webpack, webpack-cli
index.js 里的代码
// 事件
import './page/event'
event.js 代码如下
// 生成数字
import createNumber from '../util/createNumber'
// 添加数字
import appendNumber from './appendNumber'
let num = new createNumber(600);
let isClick = false;
/**
* 是否开始生成
* @param {*} e
*/
window.onclick = function(e){
if(!isClick){
num.start()
num.callback = appendNumber;
isClick = true;
}else{
num.stop()
isClick = false;
}
createNumber.js 代码如下
// 判断是否为素数
import IsPrimeNumber from './IsPrimeNumber'
/**
* 生成数字
*/
export default class createNumber {
constructor(duration = 500 ){
this.timer = null;
this.duration = duration;
this.num = 0;
this.callback = null;
}
// 开始生成数字
start(){
if(this.timer){
return;
}
this.timer = setInterval(() => {
// 使用回调函数实现对其数字的操作
this.callback && this.callback(this.num,IsPrimeNumber(this.num))
this.num++;
}, this.duration);
}
// 暂停生成数字
stop(){
clearInterval(this.timer)
this.timer = null;
}
}
IsPrimeNumber.js 代码如下
/**
*判断是否为素数
* @param {*} num 需要被判断的数字
* @returns 当为素数时返回false
*/
export default function (num) {
if (num < 2) {
return false;
}
let max = num - 1;
for (let i = 2; i <= max; i++) {
if (num % i === 0) {
return true;
}
}
return false
appendNumber.js 的代码如下
// 随机rgb格式颜色值
import renderColor from '../util/renderColor'
// 素数动画
import primeNumerMove from '../util/primeNumerMove'
// 引入jQuery
import $ from 'jquery'
const divContainer = $('#divContainer');
const divCenter = $('#divCenter');
/**
* 添加元素
* @param {Number} num 需要王元素里添加的数字
* @param {boolean} isTrue 是否是素数
*/
export default function(num , isTrue){
divCenter.text(num)
let span = $('<span>').text(num);
if(!isTrue){
let color = renderColor()
span.css("color", color)
primeNumerMove(num,color)
}
divContainer.append(span)
}
renderColor.js 代码如下
// 随机数字
import renderNumber from './renderNumber';
/**
* @returns 返回一个随机的rgb格式的颜色值
*/
export default function (){
let r = renderNumber(255,0);
let g = renderNumber(255,0);
let b = renderNumber(255,0);
return `rgb(${r},${g},${b})`
}
renderNumber 代码如下
/**
* 返回俩数字之间的随机数
* @param {Number} max 最大值
* @param {Number} min 最小值
* @returns 返回一个数字
*/
export default function (max, min){
return Math.floor( Math.random() * (max - min ) + min)
}
primeNumerMove 的代码如下
// 随机数字
import renderNumber from './renderNumber'
// 引入jQuery
import $ from "jquery"
/**
* 素数的动画
* @param {Number} num 素数
* @param {String} color 素数的颜色值
*/
export default function(num,color){
let x = renderNumber(360,-360)
let y = renderNumber(360,-360)
let div = $('<div>').addClass('center').text(num).css("color",color)
$('body').append(div)
getComputedStyle(div[0]).width;
div.css({
'transform':`translate(${x}px,${y}px)`,
"opacity": 0,
});
}
总结:
jQuery的创建元素 $('<div>')
不是 $('div')
createNumber.js 中的 如何使用模块化控制数字的样式与动画呢,此时使用的使用回调函数的形式来实现