因爲每次開發的時候都會遇到不少問題,而每次解決以後又會忘記,因此,給本身開一片小天地,來記錄一下那些坎坎坷坷,記錄本身的成長。css
使用場景: 作網頁的時候,有些文字咱們須要能被選中,有些咱們不要能被選中,那麼這就須要用到一個css屬性了,那就是 user-select。html
屬性值:vue
none : 元素和子元素的文本將沒法被選中
text : 文本能夠被選中
auto : 文本將根據瀏覽器的默認屬性進行選擇
all : 當全部內容做爲一個總體時能夠被選擇。若是雙擊或者在上下文上點擊子元素,那麼被選擇的部分將是以該子元素向上回溯的最高祖先元素git
在利用github實現多人合做程序開發的過程當中,咱們有時會出現錯誤提交的狀況,此時咱們但願能撤銷提交操做,讓程序回到提交前的樣子,總結兩種解決方法:回退(reset)、反作(revert)。github
git的版本管理,及HEAD的理解 使用git的每次提交,Git都會自動把它們串成一條時間線,這條時間線就是一個分支。若是沒有新建分支,那麼只有一條時間線,即只有一個分支,在Git裏,這個分支叫主分支,即master分支。有一個HEAD指針指向當前分支(只有一個分支的狀況下會指向master,而master是指向最新提交)。每一個版本都會有本身的版本信息,如特有的版本號、版本名等。數組
git reset瀏覽器
HEAD指向的版本就是當前版本,所以,Git容許咱們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。
穿梭前,用git log能夠查看提交歷史,以便肯定要回退到哪一個版本。
要重返將來,用git reflog查看命令歷史,以便肯定要回到將來的哪一個版本。bash
使用場景: 若是想恢復到以前某個提交的版本,且那個版本以後提交的版本咱們都不要了,就能夠用這種方法。app
版本回退後使用git push -f提交更改,此時使用「git push"會報錯,由於本地庫HEAD指向的版本比遠程庫的要舊。 echarts
git revert
原理: git revert是用於「反作」某一個版本,以達到撤銷該版本的修改的目的。好比,咱們commit了三個版本(版本1、版本2、 版本三),忽然發現版本二不行(如:有bug),想要撤銷版本二,但又不想影響撤銷版本三的提交,就能夠用 git revert 命令來反作版本二,生成新的版本四,這個版本四里會保留版本三的東西,但撤銷了版本二的東西。
使用場景: 若是咱們想撤銷以前的某一版本,可是又想保留該目標版本後面的版本,記錄下這整個版本變更流程,就能夠用這種方法。
offsetLeft、offsetTop 子元素相對於父元素的位移(左位移、上位移) offsetWidth、offsetHeight 元素的可見寬度和可見高度 clientX、clientY 用於獲取鼠標座標(相對於頁面的座標)
style.left返回的是字符串、offsetLeft返回的是數值 style.left可讀可寫,offsetLeft只讀 style.left的值須要預先定義,不然取到的值爲空; offsetLeft不需提早定義,直接獲取
使用場景: 鼠標移上某個菜單或者某個位置,顯示一個彈出框,移開則隱藏彈出框,就是css中hover效果,這種一般作法是每一個子菜單下都有一個彈框,父元素相對定位,子元素絕對定位,只須要控制的彈框的顯示與隱藏便可,可是,當鼠標移動到邊界的菜單上時,彈框可能會超出外部元素的範圍。
解決方案: 動態的計算彈框距離外部元素的位置,即獲取元素的offsetLeft、offsetTop、offsetWidth、offsetHeight,若是彈框的寬度(offsetWidth)+距離左邊的距離(offsetLeft)大於父元素的寬度,則判斷爲超出外部元素範圍,須要動態改變彈框距離邊框的位置。
這裏對彈框的佈局有限制,雖然彈框要隱藏,可是不能使用display:none的方式隱藏,可使用opacity:0或者visibility: hidden隱藏元素,由於display:none方式不能獲取到元素的高度,寬度等
demo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<style>
#box {
width: 500px;
height: 500px;
background: #0a67fb;
margin: 100px auto;
position: relative;
}
#inner-box {
width: 200px;
height: 200px;
background: #00F7DE;
position: absolute;
top: 50px;
left: 320px;
visibility: hidden;
}
</style>
<body>
<div id="box">
<div id="inner-box">
</div>
</div>
<script>
var box = document.querySelector('#box');
var innerbox = document.querySelector('#inner-box');
box.onmouseenter = function (e) {
var wrapperBoxWidth = box.offsetWidth;// 獲取父容器寬度
var wrapperBoxHeight = box.offsetHeight;// 獲取父容器高度
var innerBoxWidth = innerbox.offsetWidth;// 獲取彈框寬度
var innerBoxHeight = innerbox.offsetHeight;// 獲取彈框高度
var innerBoxLeft = innerbox.offsetLeft;// 獲取彈框距離左側寬度
var innerBoxTop = innerbox.offsetTop;// 獲取彈框距離頂部高度
innerbox.style.visibility = 'visible' // 鼠標移入時顯示彈框
// 若是彈框寬度+距離左側寬度大於外部元素的寬度,則右側溢出
if (innerBoxLeft + innerBoxWidth > wrapperBoxWidth) {
innerbox.style.left = 'auto'
innerbox.style.right = '10px'
}
// 若是彈框高度+距離頂部高度大於外部元素的高度,則底部溢出
if (innerBoxTop + innerBoxHeight > wrapperBoxHeight) {
innerbox.style.top = 'auto'
innerbox.style.bottom = '10px'
}
}
box.onmouseleave = function () {
innerbox.style.visibility = 'hidden' // 鼠標移開時隱藏彈框
}
</script>
</body>
</html>
複製代碼
最近在作關於echarts畫圖的項目的時候,對於先前生成的echarts圖,我後續的操做中改變他的option的時候,它會將先前的數據也加進去;經過查閱echarts文檔後,發現,文檔中寫到 setOption是設置圖表實例的配置項以及數據,萬能接口,全部參數和數據的修改均可以經過 setOption 完成,ECharts 會合並新的參數和數據,而後刷新圖表。
chart.setOption(option, notMerge, lazyUpdate);
option
圖表的配置項和數據,具體見配置項手冊。
notMerge
可選,是否不跟以前設置的 option 進行合併,默認爲 false,即合併。
lazyUpdate
可選,在設置完 option 後是否不當即更新圖表,默認爲 false,即當即更新。
複製代碼
解決方案: chart.setOption(option, true);
chart.clear(); //清空當前實例,會移除實例中全部的組件和圖表。清空後調用 getOption 方法返回一個{}空對象。
foreach()沒法在全部元素都傳遞給調用的函數以前終止遍歷。
解決方案: 由於foreach()沒法經過正常流程終止,因此能夠經過拋出異常的方式實現終止。
try {
var array = ["first","second","third","fourth"];
// 執行到第3次,結束循環
array.forEach(function(item,index){
if (item == "third") {
throw new Error("EndIterative");
}
alert(item);// first,sencond
});
} catch(e) {
if(e.message!="EndIterative") throw e;
};
// 下面的代碼不影響繼續執行
alert(10);
複製代碼
首先這裏有一個數組:
let array = [{name:'liuliu',age:8},
{name:'chuchen',age:10}];
複製代碼
我想拿到其中名字爲劉劉的,使用filter: array.filter(callback,[ thisObject]);:
array.filter(item=>{return item.name==='liuliu'})
複製代碼
我想知道數組中全部人的名字,使用map: array.map(callback,[, thisObject])
array.map(item=>{return item.name})
複製代碼
以前在閱讀vue中文文檔的時候,沒有過多的注意這個修飾符,直到我在使用element組件的時候,想給下拉菜單組件添加一個click事件,卻發現沒有效果。 查閱資料後才發現,v-on 是對 Vue 的事件體系封裝後的 API 接口,官方文檔中指出Vue 使用的是一套本身的事件傳遞機制,如 @click 等事件是通過 Vue 封裝的。因此在一些實際上處理 DOM 原生事件的場合須要添加額外的標識符。
因此須要在click後面加一個.native將組件變成一個普通的HTML標籤,可是該修飾符對普通HTML標籤無效。
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="editFeatureGroup(data)">編輯</el-dropdown-item>
<el-dropdown-item @click.native="deleteFeatureGroup(data)">刪除</el-dropdown-item>
</el-dropdown-menu>
複製代碼
在作項目的時候,我遇到了這樣一個問題,我想讓一個div逐漸消失,固然是用transition是沒有問題的。可是運行的時候發現,transition沒有起到效果,那其中的緣由是什麼呢? display的操做會觸發瀏覽器的reflow操做,而transition支持的效果只是觸發瀏覽器的repaint操做,若是咱們經過visibility屬性來控制顯示與隱藏,則不會破壞transition的效果。因此,能夠暫時這麼認爲:reflow與repaint的混合會破壞transition的動畫效果。
解決方法:使用visibility替代display
visibility:hidden的時候元素任然存在於文檔流中,同時visibility:hidden對應的數值0,visibility:visible對應的數值1,transition屬性能夠對0~1之間進行過渡。
<div class="parentA">
<div class="children">
</div>
<div>
<div class="parentB"></div>
複製代碼
.parentA:hover .children {}
複製代碼
.parentA:hover + .parentB{}
複製代碼
.parentA:hover ~.parentB{}
複製代碼