整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          網頁常用得動態效果庫

          在做網站要求越來越高,好不容易把顏色和布局弄得很高大上,結果人家說網站沒效果,太單一,死板,我真想:

          懂不懂!會不會玩!

          可結果呢

          以下是我自己常用的動態效果庫,自己使用的時候也很方便,推薦給大家,如果大家有更好的效果圖記得留言告訴我哦,

          WOW.js

          (讓頁面變得更有趣)

          Parallax.js

          (輕量級的的視差引擎)

          Html5ToolTips.js

          (輕量級的提示框)

          FullPage.Js

          (全屏滾動插件)

          aos.js

          (頁面滾動元素動畫)

          Sidebar Transitions

          (邊欄過渡效果)

          jInvertScroll

          (橫向滾動插件)

          0級怪物免爆要求的防御是525點,除去滿級后自帶的400點防御,剩余的125點需要通過裝備等途徑提供,前期打五人本的時候優先堆到125。

          團本的boss則需要540點防御,也就是需要通過裝備堆到140。

          巫妖王之怒版本,有部分boss存在招架加速平砍的機制,所以精準也是很需要堆的屬性,對于防戰而言,需要6.5%(即26精準)來消除躲閃,14%(即56精準)來消除招架。在條件允許的情況下,盡量保證8%(263點命中等級)的物理命中。

          至于其他防御屬性,就看需要面對的boss類型了。一般來說如果boss的傷害類型主要為魔法,那么盡量堆高血量。如果是物理傷害,則可以盡量堆高護甲、格擋、躲閃、招架。當然對于防戰來說,由于精確格擋、盾牌反傷等天賦的存在,使得格擋的收益非常高。


          推薦宏:

          沖鋒切防御宏

          #showtooltip

          /cast [stance:1]沖鋒

          /cast 防御姿態


          復仇英勇宏

          #showtooltip

          /cast 復仇

          /cast 英勇打擊


          復仇瞬劈宏

          #showtooltip

          /cast 復仇

          /cast 瞬劈斬


          群拉復仇

          #showtooltip 復仇

          /startattack

          /cast [nostance:2] 防御姿態;

          /cast 復仇

          /cast !順劈斬


          單拉復仇

          #showtooltip 復仇

          /startattack

          /cast [nostance:2] 防御姿態;

          /cast 復仇

          /cast !英勇打擊

          #showtooltip 盾牌格擋

          /startattack

          /cast [nostance:2] 防御姿態;

          /cast 盾牌格擋


          群拉雷霆宏

          #showtooltips

          /castsequence reset=30 雷霆一擊,挫志怒吼,雷霆一擊,雷霆一擊,雷霆一擊

          /cast [nostance:2] 防御姿態;


          群拉橫掃宏

          #showtooltip 橫掃攻擊

          /cast 橫掃攻擊

          /cast 反擊風暴

          /startattack

          /cast [nostance:1] 戰斗姿態;


          群嘲盾墻宏

          #showtooltip 挑戰怒吼

          /startattack

          /cast [nostance:2]防御姿態;

          /cast 挑戰怒吼

          /cast 盾墻


          沖鋒攔截宏 綁定了 英勇投擲

          #showtooltip [stance:2] 援護; [nocombat] 沖鋒; [combat] 攔截

          /cast [@mouseover, help] 防御姿態; [nocombat] 戰斗姿態; [combat] 狂暴姿態

          /cast [@mouseover, help] 援護; [nocombat] 沖鋒; [combat,stance:3] 攔截

          /cast [combat,stance:3] 血性狂暴

          /startattack

          /cast 英勇投擲


          盾擊打斷宏

          #showtooltip 盾擊

          /startattack

          /cast [nostance:2] 防御姿態;

          /cast 盾擊


          鼠標指向嘲諷宏

          #showtooltip 嘲諷

          /cast [nostance:2] 防御姿態;

          /cast [target=mouseover,nomodifier,exists,harm] 嘲諷;嘲諷


          狂暴魯莽宏

          #showtooltip 魯莽

          /startattack

          /cast [nostance:3] 狂暴姿態;

          /cast 魯莽


          屬性優先級

          防等540免爆,達到540以后屬性優先級排列如下:

          耐力>護甲>防御等級>躲閃=招架>格擋等級>格擋值



          情是這樣的

          • 早些時候,我接到了一個需求,說要將項目里程碑用甘特圖展示,一臉懵逼的我先是搜一下什么是“甘特圖” :

          From 百度百科:甘特圖(Gantt chart)又稱為橫道圖、條狀圖(Bar chart)。其通過條狀圖來顯示項目,進度,和其他時間相關的系統進展的內在關系隨著時間進展的情況。

          • 配合圖片感受 :
          • 心想,剛好最近用 echarts 畫過許多圖表,這貨應該也能用 echarts 來實現,歷盡千辛和萬苦,于是有了:
          • 產品一看,說:“這不是我要的甘特圖,重做!”,緩緩地打出一個“好的”,實際上心情如圖:
          • 在 github 上一搜,甘特圖組件不算多,由于時間緊急,當時還沒發現只有413個 的真命天子(dhtmlxGantt),僅試用了前面4款 比較多的:
          • 結果均是以失敗告終(不符合業務需求,改造難度大)。



          • 調整一下心情,重新踏上甘特圖組件調研之路 ,終于,被我發現了 Top 5 : Best free jQuery and JavaScript Dynamic Gantt Charts for web applications 這個網站,真命天子 dhtmlxGantt 排名TOP1,于是我開始對其進行了試用及研究。
          • 經過一番折騰,終于做出了符合業務方需求的甘特圖 :
          • 有一說一,與 echarts 模擬的甘特圖一比,dhtmlxGantt 確實功能強大了許多,除了能實現對重要日期(如今日/項目開始時間/項目結束時間等)進行標示、tooltip、里程碑狀態區分等功能之外,最重要的是可以實現按時/日/月/年的切換。
          • 由于 dhtmlxGantt 有免費版和付費版,一開始試用也不知道成不成功,所以我下載了免費版的源碼進行了一番研究,幸好最后的結果也是可以通過一些配置來實現需求,下面將介紹怎么實現。

          通過配置 dhtmlxGantt 實現的功能

          在 react 項目中使用

          • dhtmlxGantt 在 github 提供了在 Vue.js/Angular/React 項目中的使用方法入口,本文將對如何在 react 項目中使用進行介紹(經實踐)。
          • 下載命令:
          yarn add dhtmlx-gantt
          復制代碼
          • 在組件中使用:
          import 'dhtmlx-gantt';
          import 'dhtmlx-gantt/codebase/dhtmlxgantt.css';
          import 'dhtmlx-gantt/codebase/ext/dhtmlxgantt_marker.js';
          import 'dhtmlx-gantt/codebase/ext/dhtmlxgantt_tooltip.js';
          import 'dhtmlx-gantt/codebase/locale/locale_cn.js';
          import * as React from 'react';
          import { getGanttConfigByZoomValue } from '../../utils/milestone.lib';
          import Toolbar from './components/Toolbar';
          import * as styles from './index.module.less';
          
          export default class Gantt extends React.Component<any> {
            state = {
              currentZoom: 'Days', // 默認按日維度展示
              isMount: false,
            };
          
            private ganttContainer: any;
          
            componentWillReceiveProps (nextProps: any) {
              this.generateGantt();
              this.setState({ isMount: true });
            }
          
            handleZoomChange = (zoom: string) => {
              this.setState({ currentZoom: zoom }, () => {
                this.generateGantt();
              });
            }
          
            async generateGantt () {
              const { ganttData } = this.props;
              if (this.state.isMount) { // 若不加判斷,首次使用會報錯
                gantt.clearAll(); // 移除所有任務,否則更新時任務會疊加
              }
              this.setConfig(); // 添加配置
              gantt.init(this.ganttContainer); // 初始化 dhtmlxGantt 到 ganttContainer 容器中
              gantt.parse(ganttData); // 將數據注入到甘特圖
            }
          
            setConfig () {
              ...
            }
          
            setZoom (value: string) {
              gantt.config = {
                ...gantt.config,
                ...getGanttConfigByZoomValue(value), // 根據維度展示不同的日期格式
              };
            }
          
            renderContent () {
              const { currentZoom } = this.state;
              return (
                <React.Fragment>
                  <div className={styles.zoomBar}>
                    <Toolbar zoom={currentZoom} onZoomChange={this.handleZoomChange} />
                  </div>
                  <div className={styles.gantt}}>
                    <div
                      ref={input => {
                        this.ganttContainer = input;
                      }}
                      style={{ width: '100%', height: '100%' }}
                    />
                  </div>
                </React.Fragment>
              );
            }
            
            render () {
              return (
                <div className={styles.ganttWrapper}>
                  {this.renderContent()}
                </div>
              );
            }
          }
          復制代碼
          • 根據 setConfig 和 setZoom 方法可以看到,我們可以通過對 gantt 實例進行操作來實現不同的功能。

          只讀模式

          • 在初始化 dhtmlxGantt 之前,通過將 gantt.config.readonly 設置為 true 來限制甘特圖為只讀模式:
          gantt.config.readonly = true;
          gantt.init(this.ganttContainer);
          復制代碼
          • 可以看到,盡管設置了只讀模式,表格行被選中后無法取消選中,同時,表格列最右邊仍有?號按鈕,雖然點了沒有反應:
          • 解決表格行被選中后無法取消選中的問題,可以通過以下設置即可解決:
          gantt.config.readonly = true; // 開啟只讀模式
          select_task: false, // 禁止任務被選中,
          gantt.init(this.ganttContainer);
          復制代碼
          • 至于表格列最右邊仍有?號按鈕的問題,可以通過自定義表格列來解決 。

          自定義表格列

          • 表格列設置如下:
          gantt.config.columns = [
            {
              name: 'text',
              label: '里程碑節點',
              width: 280,
              template: function (obj: any) {
                return `節點:${obj.text}`; // 通過 template 回調可以指定返回內容值
              },
            },
          ];
          gantt.init(this.ganttContainer);
          復制代碼
          • 結果如下:

          自定義tooltip

          • 如果我們要自定義鼠標移動到任務上的 tooltip 提示,非常重要的一點是需要引入 dhtmlxgantt_tooltip.js,才可以使用通過 gantt.attachEvent 方法添加 tooltip,然后可以開始進行自定義:
          // 自定義tooltip內容
          gantt.templates.tooltip_text = function (start: Date, end: Date, task: any) {
            const t = gantt;
            const output = `<b>里程碑:</b>${task.text}<br/><b>狀態:</b>${
              MILESTONE_STATE_MAP[task.state]
              }<br/><b>計劃開始時間:</b>${t.templates.tooltip_date_format(
              start,
              )}<br/><b>計劃結束時間:</b>${t.templates.tooltip_date_format(end)}`;
            return output;
          },
          // 添加tooltip
          gantt.attachEvent('onGanttReady', function () {
            var tooltips = gantt.ext.tooltips;
            tooltips.tooltip.setViewport((gantt as any).$task_data);
          });
          復制代碼
          • 當鼠標移動到項目上是,可以看到我們自定義的 tooltip 內容:

          展示今日、項目開始和結束標示線

          • 與 tooltip 功能類似,如果需要使用標示線的功能,需要引入 dhtmlxgantt_marker.js,這樣才能通過 gantt.addMarker 方法為一些重要日期的增加標示:
          const { online_date, offline_date } = this.props;
          // 今日紅線
          let today = new Date(`${getEndOfDate()}`); // getEndOfDate 為獲取今天結束時間的方法
          gantt.addMarker({
              start_date: today,
              css: 'today',
              text: '今日',
          });
          
          // 項目開始時間
          if (online_date) {
            gantt.addMarker({
              start_date: online_date,
              css: 'projectStartDate',
              text: '項目開始',
            });
          }
          
          // 項目結束時間
          if (offline_date) {
            gantt.addMarker({
              start_date: offline_date,
              css: 'projectEndDate',
              text: '項目結束',
            });
          }
          復制代碼
          • 需要注意 ??:除了今日標示線已經有默認樣式以外,新增加的標示線需要指定css類名來增加樣式:
          .projectStartDate, .projectEndDate {
            background: #00bcd4;
          }
          復制代碼
          • 結果:

          自定義任務顏色

          • 可以通過設置 gantt.templates.task_class 實現任務顏色自定義:
          task_class: function (start: Date, end: Date, task: any) {
            return `milestone-${task.state}`; // task.state值為default/unfinished/finished/canceled其中一種
          },
          復制代碼
          • css:
          .milestone-default {
            border: none;
            background: rgba(0, 0, 0, 0.45);
          }
          .milestone-unfinished {
            border: none;
            background: #5692f0;
          }
          .milestone-finished {
            border: none;
            background: #84bd54;
          }
          .milestone-canceled {
            border: none;
            background: #da645d;
          }
          復制代碼

          高亮周末日期顏色

          • 由于公司周末不上班 ,可以將周末日期顏色進行高亮:
          // 突出周末顏色
          (gantt.templates as any).timeline_cell_class = function (item: any, date: Date): string {
            if (date.getDay() === 0 || date.getDay() === 6) {
              return 'weekend';
            }
            return '';
          };
          復制代碼
          • 結果:
          • 可以看到,由于按月和按年視圖展示,會用當前列的時間去做計算,這樣會導致整周/整月都被高亮,這明顯不是我們想要的結果,那就改造一下吧:
          // 突出周末顏色
          const disableHighlight =
            this.state.currentZoom === 'Years' || this.state.currentZoom === 'Months';
          (gantt.templates as any).timeline_cell_class = function (item: any, date: Date): string {
            if (!disableHighlight && (date.getDay() === 0 || date.getDay() === 6)) {
              return 'weekend';
            }
            return '';
          };
          復制代碼
          • 可以看到,三月這一列變正常了:

          切換視圖

          • 切換視圖的 Toolbar 組件在文檔中有詳細介紹,這里就不進行復述了,核心是getGanttConfigByZoomValue方法,用于設置不同視圖的具體時間格式,代碼如下:
          export function getGanttConfigByZoomValue (value: string) {
            switch (value) {
              case 'Hours':
                return {
                  scale_unit: 'day',
                  scale_height: 50,
                  min_column_width: 30,
                  date_scale: '%Y-%m-%d',
                  subscales: [
                    {
                      unit: 'hour',
                      step: 1,
                      date: '%H',
                    },
                  ],
                };
              case 'Days':
                return {
                  scale_unit: 'week',
                  scale_height: 50,
                  min_column_width: 70,
                  date_scale: '%Y年 %W周',
                  subscales: [
                    {
                      unit: 'day',
                      step: 1,
                      date: '%m-%d',
                    },
                  ],
                };
              case 'Months':
                return {
                  scale_unit: 'month',
                  scale_height: 50,
                  min_column_width: 70,
                  date_scale: '%Y-%m',
                  subscales: [
                    {
                      unit: 'week',
                      step: 1,
                      date: '%W周',
                    },
                  ],
                };
              case 'Years':
                return {
                  scale_unit: 'year',
                  scale_height: 50,
                  min_column_width: 70,
                  date_scale: '%Y年',
                  subscales: [
                    {
                      unit: 'month',
                      step: 1,
                      date: '%M',
                    },
                  ],
                };
              default:
                return {};
            }
          }
          復制代碼
          • 通過上面介紹的配置,即可實現符合業務方需求的甘特圖 :

          總結

          • 本文記錄了我是為何棄用 echarts,轉而改用 dhtmlxGantt 完成甘特圖的過程,對一些功能的具體配置進行了詳細的介紹。
          • 通過這次的需求我學到了很多,有時候應該轉換思路,先找找有沒有現成的開源庫,看看在原來已有的功能基礎上,能如何進行改造使其滿足需求,這樣能避免走很多彎路。正如牛頓所說:“如果說我看得比別人更遠些,那是因為我站在巨人的肩膀上。”

          以上內容如有遺漏錯誤,歡迎留言 ??指出,一起進步

          如果覺得本文對你有幫助,留下你寶貴的


          轉載鏈接:https://juejin.im/post/5e7ffd56f265da794e526102


          主站蜘蛛池模板: 精品国产亚洲一区二区在线观看 | 国产精品综合一区二区三区| 中文字幕精品一区影音先锋 | 一区二区三区亚洲视频| 精品国产免费一区二区三区| 中文人妻av高清一区二区| 国产AV一区二区三区无码野战| 久久精品国产一区二区三区日韩| 精品亚洲AV无码一区二区三区 | 日本成人一区二区三区| 国产欧美色一区二区三区| 国产一区二区免费在线| 国产成人一区二区三区视频免费 | 午夜AV内射一区二区三区红桃视| 久久精品无码一区二区WWW| 日韩经典精品无码一区| 久久久一区二区三区| 麻豆文化传媒精品一区二区| 国产一区精品视频| 国产亚洲一区二区三区在线观看| 亚洲福利一区二区三区| 无码人妻一区二区三区在线水卜樱| 精品一区二区三区色花堂| 亚洲欧洲精品一区二区三区| 国产乱码精品一区二区三区四川| 国产av熟女一区二区三区| 人妻aⅴ无码一区二区三区| 国产在线观看一区二区三区四区| 综合久久一区二区三区 | 国产乱码精品一区二区三区香蕉| 黄桃AV无码免费一区二区三区 | 一区二区在线电影| 狠狠做深爱婷婷综合一区| 国产激情一区二区三区四区| 精品无码av一区二区三区 | 国产suv精品一区二区6| 一区二区亚洲精品精华液| 日韩精品中文字幕无码一区| 国产区精品一区二区不卡中文| 国产成人精品一区二区三在线观看| 精品无码成人片一区二区98|