JS實(shí)現(xiàn)transform實(shí)現(xiàn)扇子效果
更新時(shí)間:2020年01月17日 08:34:35 作者:SSSkyCong
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)transform實(shí)現(xiàn)扇子效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了JS實(shí)現(xiàn)transform實(shí)現(xiàn)扇子效果的具體代碼,供大家參考,具體內(nèi)容如下
描述:
JS面向?qū)ο蟆胻ransform實(shí)現(xiàn)扇子效果
效果:

實(shí)現(xiàn):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style>
.fan { margin: 0 auto; position: relative; top: 100px; width: 50px;}
.fan-other { margin: 0 auto; position: relative; top: 300px; width: 50px;}
</style>
<body>
<div class="fan"></div>
<div class="fan-other"></div>
<script>
(function(){
// 扇子類
class Fan {
// Fan類的構(gòu)造器,接收傳入的參數(shù)
// params selector 容器的選擇器
// params options 一些配置參數(shù)
// options size 尺寸
// ...
// void return
constructor ( selector, options ) {
// 扇子容器
this.selector = selector
this.wrapper = document.querySelector(selector)
// 默認(rèn)配置項(xiàng)
let _options = {
size: 'normal' // large
}
// 配置項(xiàng)
this.options = options || _options
// 扇葉的尺寸
this.size = {
width: 50, height: 150
}
// 進(jìn)行初始化操作
this.init()
}
// 初始化函數(shù)
init () {
// 創(chuàng)建扇葉
this.createFanBlade()
}
// 創(chuàng)建扇葉
createFanBlade () {
// 扇葉的數(shù)量 當(dāng)new時(shí)size不為normal時(shí),輸出11片扇葉的扇子
let _bladeNumbers = this.options.size === 'normal' ? 9 : 11;
let _fragmentStr = '';
let { width, height } = this.size;
// 扇葉樣式
let _bladeStyle = {
width: width + 'px',
height: height+ 'px',
position: 'absolute',
top: 0, left: 0
}
for (let i = 0; i < _bladeNumbers; i++) {
_bladeStyle.background = this.createRandomColor()//背景顏色隨機(jī)
_fragmentStr += `<div style="${this.turnStyleToString(_bladeStyle)}"></div>`
}
// 放入扇葉
this.wrapper.innerHTML = _fragmentStr ;
this.createTransition(_bladeNumbers);
}
// 制作動(dòng)效Style并插入到head中
createTransition (_bladeNumbers) {
let _result = '<style>';
_result += `
${this.selector} div { transition: all 0.5s; transform-origin: center bottom; }
`;
// 0 1 2 3 4 5 6 7 8 角度轉(zhuǎn)化 0-8 中間是0° -70°~70°
for (let i = 0; i < _bladeNumbers; i++) {
let _num = (_bladeNumbers - 1) / 2
let _angle = (i - _num) * 70 / _num
_result += `
${this.selector}:hover div:nth-child(${i+1}){
transform: rotate(${_angle}deg); }
`
}
_result += '</style>'
document.querySelector('head').innerHTML += _result;
}
// 轉(zhuǎn)換樣式對(duì)象為字符串
turnStyleToString (styleObject) {
let _result = ''
for (const key in styleObject) {
_result += key + ':' + styleObject[key] + ';'
}
return _result;
}
// 隨機(jī)創(chuàng)建顏色
createRandomColor () {
return "#"+(function(color){
return new Array(7-color.length).join("0")+color;
})((Math.random() * 0x1000000 | 0).toString(16));
}
}
new Fan('.fan')
new Fan('.fan-other', {
size: 'large'
})
})();
</script>
</body>
</html>
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
js實(shí)現(xiàn)二代身份證號(hào)碼驗(yàn)證詳解
本文給大家分享一段超級(jí)全面的二代身份證號(hào)碼驗(yàn)證程序,由JS編寫而成,可以校驗(yàn)身份證的地址碼、出生日期碼、順序碼和數(shù)字校驗(yàn)碼。是身份證去偽存真的一大利器。2014-11-11
淺談jQuery異步對(duì)象(XMLHttpRequest)
文章淺顯易懂的將jQuery異步對(duì)象分為了5個(gè)步奏,非常有利于我們學(xué)習(xí)記憶,是篇相當(dāng)不錯(cuò)的學(xué)習(xí)jQuery異步對(duì)象的文章,這里推薦給大家。2014-11-11
js的各種排序算法實(shí)現(xiàn)(總結(jié))
下面小編就為大家?guī)硪黄猨s的各種排序算法實(shí)現(xiàn)(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-07-07
JavaScript高級(jí)程序設(shè)計(jì) XML、Ajax 學(xué)習(xí)筆記
JavaScript高級(jí)程序設(shè)計(jì) XML、Ajax 學(xué)習(xí)筆記,需要的朋友可以參考下。2011-09-09

