成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端初學(xué)基礎(chǔ)知識(shí) 3

Chao / 3250人閱讀

摘要:根據(jù)瀏覽器設(shè)備的繪制限制來(lái)更新動(dòng)畫,回調(diào)的次數(shù)常是每秒次。鼠標(biāo)移入則停止自動(dòng)改變樹枝狀態(tài),轉(zhuǎn)為由鼠標(biāo)的橫縱坐標(biāo)控制?;镜纳羁截惙椒〝?shù)組,等方法,新增運(yùn)算符對(duì)象思路是把對(duì)象拆開分別賦值,同樣可以使用新增運(yùn)算符,循環(huán)等。

canvas動(dòng)畫

???????動(dòng)畫的形成:先畫出一幅圖,改變其中的一些參數(shù),重新繪制圖片...不斷的重復(fù)形成動(dòng)畫。

fillStyle:設(shè)置或返回填充繪畫的顏色,漸變或模式

strokeStyle:設(shè)置或返回用于筆觸的顏色,漸變或模式

fill(): 填充當(dāng)前路徑(如果路徑未關(guān)閉則會(huì)從路徑結(jié)束點(diǎn)到開始點(diǎn)之間添加一條線)

stroke():繪制已定義的路徑。

moveTo():把路徑移動(dòng)到畫布中的指定點(diǎn),不創(chuàng)建線條

beginPath():起始一條路徑或重置當(dāng)前路徑

closePath():創(chuàng)建從當(dāng)前點(diǎn)回到起始點(diǎn)的路徑

lineTo():添加一個(gè)新點(diǎn),創(chuàng)建一條連接至該點(diǎn)的線條

clearRect():清除指定矩形內(nèi)的像素

arc():創(chuàng)建弧或曲線

rotate():創(chuàng)建兩點(diǎn)之間的弧或曲線

translate():重新映射畫布上的(0,0)位置

drawImage():繪制圖像、畫布或視頻

save():保存當(dāng)前環(huán)境狀態(tài)

restore():返回之前保存過(guò)的路徑和狀態(tài)

getContext():返回一個(gè)用于在畫布上繪圖的環(huán)境

requestAnimationFrame():回調(diào)例程調(diào)用 requestAnimationFrame()。根據(jù)瀏覽器設(shè)備的繪制限制,來(lái)更新動(dòng)畫,回調(diào)的次數(shù)常是每秒60次。

canvas學(xué)習(xí)——樹鏡
整體邏輯

創(chuàng)建一個(gè)類,實(shí)例化根元素,遞歸創(chuàng)建分支直到層數(shù),每層分支長(zhǎng)度(length)遞減,直至層數(shù)>=5;

調(diào)用drawBranch生成一張圖片

改變樹枝展開角度以及位置執(zhí)行requestA nimationFrame();重復(fù)執(zhí)行;形成動(dòng)畫

將12個(gè)不同旋轉(zhuǎn)角度的動(dòng)畫canvas添加到canvas2.圍成一圈。

鼠標(biāo)移入則停止自動(dòng)改變樹枝狀態(tài),轉(zhuǎn)為由鼠標(biāo)的橫縱坐標(biāo)控制。

關(guān)鍵代碼理解
class Branch {
    /**
     * 分枝類,以下為參數(shù),都帶有默認(rèn)值
     * 位置 position
     * 長(zhǎng)度 length
     * 分支位置 divergeAt
     * 展開角度 angle
     * 層數(shù) depth
     * 分支展開角度變化量 spread
     */
  constructor(position = {x : 0, y: 0}, length = 100, divergeAt = 0.5, angle = 0, depth = 0, spread = 45 * TO_RADIAN) {
    this.position = position;
    this.length = length;
    this.divergeAt = divergeAt;
    this.angle = angle;
    this.depth = depth;

    this.color = "#000";
    this.spread = spread;
    this.branches = [];

    this.grow();
  }

  grow() {
      /**
       * 創(chuàng)建分支,如果canBranch = true(未達(dá)到最大分支數(shù)量)
       * 新分支長(zhǎng)度為父級(jí)的0.75,深度加1
       * 展開角度變化spread
       * 由于構(gòu)造方法中調(diào)用了grow方法,所以會(huì)不斷重復(fù)創(chuàng)建上述過(guò)程
       */
    if (!this.canBranch) {
      return;
    }

    this.branches = [];

    const nextLength = this.length * 0.75;
    const nextDepth = this.depth + 1;

    this.branches.push(
      new Branch(
        this.growPosition,
        nextLength,
        this.divergeAt,
        this.angle + this.spread,
        nextDepth,
        this.spread
      ),
      new Branch(
        this.growPosition,
        nextLength,
        this.divergeAt,
        this.angle - this.spread,
        nextDepth,
        this.spread
      )
    );
  }

  update(spread, divergeAt) {
    this.spread = spread;
    this.divergeAt = divergeAt;

    this.grow();
  }

  get growPosition() {
    const dl = this.length * this.divergeAt;

    return {
      x: this.position.x + (Math.cos(this.angle) * dl),
      y: this.position.y + (Math.sin(this.angle) * dl),
    };
  }

  get canBranch() {
    return this.depth < maxDepth;
  }
}
    /**
     * 保存當(dāng)前狀態(tài)
     * 根據(jù)branch類中的數(shù)據(jù)畫圖(顏色,直線和圓點(diǎn))
     * 遞歸對(duì)分支進(jìn)行繪圖
     */
const drawBranch = (branch, phase) => {
  const h = ~~(200 + (160 * phase));
  const l = 50 + ~~(((branch.depth / (maxDepth + 1))) * 50);

  const endX = branch.length;
  const endY = 0;
  const r = 2;

  ctx.save();

  ctx.strokeStyle = `hsl(${h}, 100%, ${l}%)`;
  ctx.translate(branch.position.x, branch.position.y);
  ctx.rotate(branch.angle);

  ctx.beginPath();
  ctx.moveTo(0, 0);
  ctx.lineTo(endX, endY);
  ctx.stroke();
  ctx.closePath();

  ctx.beginPath();
  ctx.fillStyle = `hsl(${h}, 100%, 50%)`;
  ctx.arc(endX, endY, r, 0, PI * 2, false);
  ctx.fill();
  ctx.closePath();

  ctx.restore();

  branch.branches.forEach((b) => {
    drawBranch(b, phase);
  });
};
const loop = () => {
    /**
     * 改變類中參數(shù)的值
     * 將第一個(gè)canvas添加到在第二個(gè)canvas中循環(huán)12次每次旋轉(zhuǎn)2PI/12的角度,形成一個(gè)環(huán)狀
     * 調(diào)用requestAnimationFrame() 重新根據(jù)類中的數(shù)據(jù)畫圖
     */
  let phase = rootBranch.spread / maxSpread;

  clear(phase);

  if (autoAnimate) {
    phase = map(Math.sin(autoTick), -1, 1, 0, 1);

    spread = phase * maxSpread;
    divergeAt = map(Math.sin(autoTick), -1, 1, 0, 0.5);

    autoTick += autoSpeed;
  }

  rootBranch.update(spread, divergeAt);

  drawBranch(rootBranch, phase);

  const numSegments = 12;
  const angleInc = PI * 2 / numSegments;
  let angle = tick;

  for (let i = 0; i < numSegments; i++) {
    ctx2.save();
    ctx2.translate(midX, midY);
    ctx2.rotate(angle);
    ctx2.drawImage(canvas, -w / 2, -h / 2);
    ctx2.restore();
    angle += angleInc;
  }

  tick += 0.002;

  requestAnimationFrame(loop);
};
element-ui 安裝

npm安裝: npm i element-ui -s

cdn

引入
完整引入
import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
Vue.use(ElementUI);
按需引入

需要安裝 babel-plugin-component:

npm install babel-plugin-component -D

在.babelrc中添加:

"plugins": [
    "transform-vue-jsx", "transform-runtime",
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
import {Loading, Tabs, TabPane,} from "element-ui";

Vue.use(Loading);
Vue.use(Tabs);
Vue.use(TabPane);
自定義主題 在項(xiàng)目中直接改變scss變量
/* 改變主題色變量 */
$--color-primary: teal;

/* 改變 icon 字體路徑變量,必需 */
$--font-path: "~element-ui/lib/theme-chalk/fonts";

@import "~element-ui/packages/theme-chalk/src/index";
命令行主題工具
npm i element-theme -g

之后步驟為:

安裝主題

初始化變量文件

修改變量

編譯成css

引入

JavaScript 對(duì)象的深拷貝

???????在星盤改版的時(shí)候遇到了相關(guān)的問(wèn)題,數(shù)據(jù)從父組件傳遞到子組件,當(dāng)時(shí)沒(méi)考慮到這方面的問(wèn)題,只是對(duì)數(shù)據(jù)進(jìn)行了一層的拷貝,因?yàn)楫?dāng)時(shí)傳進(jìn)來(lái)的數(shù)據(jù)是有很多層的,所以還是會(huì)導(dǎo)致源數(shù)據(jù)改變。所以總結(jié)一下,寫成一個(gè)方法,這個(gè)應(yīng)該會(huì)比較常用。

???????Object屬于引用類型,對(duì)它進(jìn)行簡(jiǎn)單賦值(obj1 = obj2)的話只是創(chuàng)建一個(gè)指針指向原數(shù)據(jù)的地址,改變它的值也會(huì)改變?cè)磾?shù)據(jù)的值,會(huì)造成很多問(wèn)題。

基本的深拷貝方法
數(shù)組

concat,slice 等方法,es6 新增運(yùn)算符‘...’

對(duì)象

思路是把對(duì)象拆開分別賦值,同樣可以使用es6 新增運(yùn)算符‘...’,for循環(huán)等。

深拷貝的實(shí)現(xiàn)

運(yùn)用遞歸逐層拷貝。

function depCopy(obj){
    let value;
    if(typeof obj === "object"){
      if(Object.prototype.toString.call(obj).slice(8,-1)==="Array"){
        // debugger;
        value = [];
        for(let i = 0, length = obj.length; i           
               
                                           
                       
                 

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94178.html

相關(guān)文章

  • 我是如何從零開始學(xué)習(xí)前端

    摘要:相關(guān)頻道最后的坦白最后我得承認(rèn)這一次我又標(biāo)題黨了無(wú)非是想吸引更多前端初學(xué)者進(jìn)來(lái),希望大家都能少走一些彎路,也希望那些從零開始自學(xué)前端的同學(xué)更有勇氣去面對(duì)自己的選擇。 我是怎么走上前端開發(fā)這條路? 首先,我是個(gè)文科生,大學(xué)里只學(xué)過(guò)vb,覺(jué)得計(jì)算機(jī)編程這東西太玄乎,不是我玩得轉(zhuǎn)的。 后來(lái)機(jī)緣巧合去做了一家互聯(lián)網(wǎng)創(chuàng)業(yè)公司的HR,閱了上千份程序員的簡(jiǎn)歷,面了上百個(gè)不同水平不同領(lǐng)域的程序員。跟程...

    mykurisu 評(píng)論0 收藏0
  • 前端——基礎(chǔ)

    摘要:思路屢清楚后,我們就開始說(shuō)零基礎(chǔ)如何自學(xué)前端開發(fā)。首先,了解前端是干什么用的,簡(jiǎn)單來(lái)說(shuō)就是負(fù)責(zé)把網(wǎng)站的頁(yè)面以一種更好的用戶體驗(yàn)提供給客戶的一份工作,就是做網(wǎng)站開發(fā)的。其實(shí)這個(gè)問(wèn)題很簡(jiǎn)單,我用最簡(jiǎn)單的語(yǔ)言給大家描述一下,學(xué)習(xí)一樣?xùn)|西就要了解這樣?xùn)|西學(xué)完了要干什么事情,有什么作用。然后就是應(yīng)該學(xué)習(xí)哪些必要的內(nèi)容,該如何運(yùn)用得當(dāng)?shù)姆椒ㄟM(jìn)行有效率的學(xué)習(xí)不至于自己摸不著頭腦,然后就是一直堅(jiān)持下去,直到...

    番茄西紅柿 評(píng)論0 收藏0
  • Java 初學(xué)者做的第一個(gè)微信小程序總結(jié)--關(guān)于Java基礎(chǔ)

    摘要:官方資料微信公眾平臺(tái)注冊(cè)小程序。官網(wǎng)開發(fā)文檔社區(qū)開發(fā)工具部署微信小程序微信小程序本身不需要部署,在微信開發(fā)工具中直接上傳代碼就行。 為什么 學(xué)習(xí) Java 三年,目前已經(jīng)工作了2年,因?yàn)樽詫W(xué),基礎(chǔ)差,所以打算年末總結(jié)一下常見(jiàn)的基礎(chǔ)知識(shí)和面試點(diǎn); 也可以通過(guò)獨(dú)立做一個(gè)項(xiàng)目整合自己工作期間學(xué)習(xí)的知識(shí),加深印象。 但是想著回家或是平時(shí)手機(jī)用的多,做一款A(yù)PP和小程序很方便查看。 項(xiàng)目展示 本...

    mudiyouyou 評(píng)論0 收藏0
  • 基礎(chǔ)前端開發(fā)初學(xué)者應(yīng)如何系統(tǒng)地學(xué)習(xí)?

    摘要:在有了基礎(chǔ)之后,進(jìn)一步學(xué)習(xí)內(nèi)容包括框架。前端學(xué)習(xí)交流群禁止閑聊,非喜勿進(jìn)。代碼提交前必須做的三個(gè)事情檢查所有變更跑一邊單元測(cè)試手動(dòng)運(yùn)行一遍所有 網(wǎng)站開發(fā)開發(fā)大致分為前端和后端,前端主要負(fù)責(zé)實(shí)現(xiàn)視覺(jué)和交互效果,以及與服務(wù)器通信,完成業(yè)務(wù)邏輯。其核心價(jià)值在于對(duì)用戶體驗(yàn)的追求??梢园慈缦滤悸穼W(xué)習(xí)系統(tǒng)學(xué)習(xí): 基礎(chǔ)知識(shí): html + css 這部分建議在?w3school 在線教程上學(xué)習(xí),邊...

    JouyPub 評(píng)論0 收藏0
  • 基礎(chǔ)前端開發(fā)初學(xué)者應(yīng)如何系統(tǒng)地學(xué)習(xí)?

    摘要:在有了基礎(chǔ)之后,進(jìn)一步學(xué)習(xí)內(nèi)容包括框架。前端學(xué)習(xí)交流群禁止閑聊,非喜勿進(jìn)。代碼提交前必須做的三個(gè)事情檢查所有變更跑一邊單元測(cè)試手動(dòng)運(yùn)行一遍所有 網(wǎng)站開發(fā)開發(fā)大致分為前端和后端,前端主要負(fù)責(zé)實(shí)現(xiàn)視覺(jué)和交互效果,以及與服務(wù)器通信,完成業(yè)務(wù)邏輯。其核心價(jià)值在于對(duì)用戶體驗(yàn)的追求??梢园慈缦滤悸穼W(xué)習(xí)系統(tǒng)學(xué)習(xí): 基礎(chǔ)知識(shí): html + css 這部分建議在?w3school 在線教程上學(xué)習(xí),邊...

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

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

0條評(píng)論

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