国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

鼠標(biāo)跟隨炫彩效果

yiliang / 2276人閱讀

摘要:以前在網(wǎng)上看到了別人這個(gè)效果,感覺很酷也很難,但當(dāng)真的去了解怎么做的時(shí)候會(huì)發(fā)現(xiàn)其實(shí)沒那么難。先來看一下效果可能不是很好看啊。

以前在網(wǎng)上看到了別人這個(gè)效果,感覺很酷也很難,但當(dāng)真的去了解怎么做的時(shí)候會(huì)發(fā)現(xiàn)其實(shí)沒那么難。用到的就是canvas。

先來看一下效果


可能不是很好看啊。

1.先創(chuàng)建一個(gè)canvas(大小、樣式自己隨意定義)

2.獲取到當(dāng)前的canvas,并準(zhǔn)備畫圖。

 let canvas = document.getElementById("canvas"),
     context = canvas.getContext("2d");

3.畫圓形

context.arc(x, y, size, startAngle, endAngle); //這里就不寫順時(shí)針逆時(shí)針了

下面我們就來看看怎么做吧。我以對(duì)象的方法去創(chuàng)建圓形。

圓形構(gòu)造函數(shù)

function Circle(x, y, size, speed) {
    this.x = x; //x坐標(biāo)
    this.y = y; //y坐標(biāo)
    this.size = size; //大小
    this.color = getRandomCokor(); //隨機(jī)的顏色
    this.X = getRandom(speed); //x軸隨機(jī)的移動(dòng)速度
    this.Y = getRandom(speed); //y軸隨機(jī)的移動(dòng)速度
    circleArr.push(this); //放到一個(gè)數(shù)組保存起來
}

創(chuàng)建圖形

Circle.prototype.createCircle = function () {
    context.beginPath();
    context.arc(this.x, this.y, this.size, 0, 2*Math.PI);
    context.fillStyle = this.color; //填充的顏色
    context.fill(); 
    context.stroke(); 
    this && this.move(); //移動(dòng)函數(shù)
}

移動(dòng)

Circle.prototype.move = function () {
    this.x += this.X; //x軸位移量
    this.y += this.Y; //Y軸位移量
    this.r -= 1; //半徑縮小的尺寸(這里我就直接固定大小了)
    if(this.r <= 0){
        this.delCircle(); //如果半徑小于0,刪除元素
    }
 }

刪除

Circle.prototype.delCircle = function () {
    for (let i = circleArr.length - 1; i >= 0; i--) {
        if(circleArr[i] === this){
            circleArr.splice(i, 1); //刪除那個(gè)元素
        }
    }    
}

當(dāng)鼠標(biāo)移動(dòng)的時(shí)候創(chuàng)建圓形

canvas.onmousemove = function mousemove(e) {
    let circle = new Circle(e.clientX, e.clientY, rValue, speedValue);
        context.clearRect(0, 0, canvas.width, canvas.height); //每次清理干凈畫布
        circleArr.forEach( function(element, index) {
            element.createCircle(); //創(chuàng)建每一個(gè)元素
        });
}

獲得隨機(jī)顏色函數(shù)

function getRandomCokor() {
    let colorR = getRandom(255),
        colorG = getRandom(255),
        colorB = getRandom(255),
        rgb = `rgb(${colorR}, ${colorG}, ${colorB})`;
    return rgb;
}
function getRandom(num) {
    return Math.floor( Math.random(0, 1) * (num) + 1);
}

當(dāng)鼠標(biāo)離開或點(diǎn)擊的時(shí)候清空畫布和當(dāng)前數(shù)組

canvas.onmouseleave = canvas.onmousedown = function mouseDown() {
    circleArr.length = 0;
    context.clearRect(0, 0, canvas.width, canvas.height);
}

下面我們?cè)賮硗卣挂幌鹿δ?/p>

先看下效果:

就是能自定義球的大小和位移大小。

HTML結(jié)構(gòu)

當(dāng)前半徑:

當(dāng)前速度:

獲取各個(gè)大小并賦值

let rRange = document.getElementById("rRange"), //大小
    rText = document.getElementById("rText"), //大小顯示框
    speedRange = document.getElementById("speedRange"), //速度
    speedText = document.getElementById("speedText"), //速度大小顯示框
    rValue = +rRange.value, //大小
    speedValue = +speedRange.value; //速度
 rText.value = rValue; //賦值顯示
 speedText.value = speedValue; //賦值顯示

當(dāng)改變的時(shí)候重新賦值

rRange.onchange = function valueChange(e) { //大小
    rValue = + this.value;
    rText.value = rValue;
}

speedRange.onchange = function valueChange(e) { //速度
    speedValue = + this.value;
    speedText.value = speedValue;
}

+整體代碼

let canvas = document.getElementById("canvas"), //獲取canvas
    rRange = document.getElementById("rRange"), //大小
    rText = document.getElementById("rText"), 
    speedRange = document.getElementById("speedRange"), //速度
    speedText = document.getElementById("speedText"),
    context = canvas.getContext("2d"),
    circleArr = [],
    rValue = +rRange.value,
    speedValue = +speedRange.value;
rText.value = rValue; //賦值顯示
speedText.value = speedValue;
function Circle(x, y, size, speed) { //構(gòu)造函數(shù)
    this.x = x;
    this.y = y;
    this.size = size;
    this.color = getRandomCokor();
    this.X = getRandom(speed);
    this.Y = getRandom(speed);
    circleArr.push(this);
}

Circle.prototype.createCircle = function () { //創(chuàng)建圖形
    context.beginPath();
    context.arc(this.x, this.y, this.size, 0, 2*Math.PI);
    context.fillStyle = this.color;
    context.fill();
    context.stroke();
    this && this.move();
}

 Circle.prototype.move = function () { //移動(dòng)
    this.x += this.X;
    this.y += this.Y;
    this.r -= 1;
    if(this.r <= 0){
        this.delCircle();
    }
 }

Circle.prototype.delCircle = function () { //刪除
    for (let i = circleArr.length - 1; i >= 0; i--) {
        if(circleArr[i] === this){
            circleArr.splice(i, 1);
        }
    }    
}

rRange.onchange = function valueChange(e) { //大小改變的時(shí)候重新賦值
    rValue = + this.value;
    rText.value = rValue;
}

speedRange.onchange = function valueChange(e) { //速度改變的時(shí)候重新賦值
    speedValue = + this.value;
    speedText.value = speedValue;
}

canvas.onmousemove = function mousemove(e) {  //鼠標(biāo)在canvas上移動(dòng)
    let circle = new Circle(e.clientX, e.clientY, rValue, speedValue);
        context.clearRect(0, 0, canvas.width, canvas.height); 
        circleArr.forEach( function(element, index) {
            element.createCircle();
        });
}

canvas.onmouseleave = canvas.onmousedown = function mouseDown() {
    circleArr.length = 0;
    context.clearRect(0, 0, canvas.width, canvas.height);
}

function getRandomCokor() { //產(chǎn)生隨機(jī)顏色
    let colorR = getRandom(255),
        colorG = getRandom(255),
        colorB = getRandom(255),
        rgb = `rgb(${colorR}, ${colorG}, ${colorB})`;
    return rgb;
}
function getRandom(num) {
    return Math.floor( Math.random(0, 1) * (num) + 1);
}

我只在canvas大小區(qū)域內(nèi)繪制圖形,你可以修改在整個(gè)document上繪制圖形。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/100968.html

相關(guān)文章

  • 不可思議的純 CSS 實(shí)現(xiàn)鼠標(biāo)跟隨效果

    摘要:原理以上面的為例子,要使用實(shí)現(xiàn)鼠標(biāo)跟隨,最重要的一點(diǎn)就是如何實(shí)時(shí)監(jiān)測(cè)到當(dāng)前鼠標(biāo)處于何處,其實(shí)很多效果,都離不開障眼法二字。 直接進(jìn)入正題,鼠標(biāo)跟隨,顧名思義,就是元素會(huì)跟隨著鼠標(biāo)的移動(dòng)而作出相應(yīng)的運(yùn)動(dòng)。大概類似于這樣: showImg(https://segmentfault.com/img/remote/1460000018405114); 通常而言,CSS 負(fù)責(zé)表現(xiàn),JavaScr...

    sshe 評(píng)論0 收藏0
  • 不可思議的純 CSS 實(shí)現(xiàn)鼠標(biāo)跟隨效果

    摘要:當(dāng)然,本文的重點(diǎn),就是介紹如何在不借助的情況下使用來模擬實(shí)現(xiàn)一些鼠標(biāo)跟隨的行為動(dòng)畫效果。原理以上面的為例子,要使用實(shí)現(xiàn)鼠標(biāo)跟隨,最重要的一點(diǎn)就是如何實(shí)時(shí)監(jiān)測(cè)到當(dāng)前鼠標(biāo)處于何處,其實(shí)很多效果,都離不開障眼法二字。直接進(jìn)入正題,鼠標(biāo)跟隨,顧名思義,就是元素會(huì)跟隨著鼠標(biāo)的移動(dòng)而作出相應(yīng)的運(yùn)動(dòng)。大概類似于這樣: 通常而言,CSS 負(fù)責(zé)表現(xiàn),JavaScript 負(fù)責(zé)行為。而鼠標(biāo)跟隨這種效果屬于行為...

    phpmatt 評(píng)論0 收藏0
  • CSS3:TEXT-SHADOW|BOX-SHADOW(炫彩字體)

    摘要:可為負(fù)值第個(gè)長(zhǎng)度值陰影垂直偏移值。不允許負(fù)值設(shè)置陰影的顏色。字體微軟雅黑 2016年2月26日個(gè)人博客文章--遷移到segmentfault (1)text-shadow(文本陰影) 在介紹css3:text-shadow文本陰影之前,我們先來看看用它都能實(shí)現(xiàn)什么效果: showImg(https://segmentfault.com/img/bV6z1P?w=300&h=136); ...

    elisa.yang 評(píng)論0 收藏0
  • CSS3:TEXT-SHADOW|BOX-SHADOW(炫彩字體)

    摘要:可為負(fù)值第個(gè)長(zhǎng)度值陰影垂直偏移值。不允許負(fù)值設(shè)置陰影的顏色。字體微軟雅黑 2016年2月26日個(gè)人博客文章--遷移到segmentfault (1)text-shadow(文本陰影) 在介紹css3:text-shadow文本陰影之前,我們先來看看用它都能實(shí)現(xiàn)什么效果: showImg(https://segmentfault.com/img/bV6z1P?w=300&h=136); ...

    wangzy2019 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<