原本項目都寫的差很少了,測試測着側着就冒出了新的想法,我由於作的是問卷,所以會有用戶必答題未答完的可能存在,原本市場部給的需求就是作一個彈窗就行了,她說想要作出跳回到用戶未答的第一道題,好吧,既然都這麼說了就只有實現一下了微信
首先來理一下思路:測試
1.要獲取用戶未填寫的題目this
2.定位到第一個未填寫的題目節點spa
3.獲取座標並跳到該座標位置日誌
第一步獲取用戶未填寫題目很容易啦,能夠在裏面加個字段什麼的來標記是否填寫,拿單選題爲例當用戶點擊的時候觸發事件傳遞給父組件code
this.$emit('choice', { questionId: this.question.id, answerIds: e.target.value, selectedIndex: selectedIndex, areaId: this.question.areaId, ifAnswered: this.myIfAnswered // 是否已答標誌 })
而後在提交的時候拿到未答的題目blog
for (let a = 0; a < this.submitArr.length; a++) { if (this.submitArr[a].ifAnswered === 'N') { this.notAnswered.push(this.submitArr[a]) } }
爲了要定位到未填寫的題目,我是在初次渲染的時候就給每一個組件綁定了該問題的惟一問題id,想要經過微信的selector去獲取id直接獲取到該組件的top值,結果就在這裏踩坑了,由於我發現選擇器使用id是不會返回結果的,通過屢次失敗以後我就嘗試了類選擇器,結果就出來了,我想多是由於我綁定的id是數字?再而後就選擇一些第一個內容就能夠了。事件
var query = wx.createSelectorQuery() let myTop = [] query.selectAll('.myAnswer').boundingClientRect() query.exec((res) => { myTop = res[0] }
let myChoose = myTop[0].top wx.pageScrollTo({ scrollTop: myChoose., duration: 300 })
這裏要記錄一個坑,由於我也是第一次用這個滾動的API,百度出來人家都用的好好的,可是個人就是不行,不說回調失敗了,根本好像就沒有觸發,什麼fail,success,complete都沒有打印日誌,也搜到過一樣的問題可是別人貌似都沒有解決,問了一手師傅,可是師傅鼓搗了一上午也沒搞出來,而後我就從新建了一個乾淨的頁面發現能夠滾動,因而乎我就嘗試着把個人組件最外層樣式刪掉了,終於發現,原來是由於個人組件設置了position:absolute,貌似就是這個緣由致使API無效,若是有其餘小夥伴出現跟我同樣的問題,記得必定看看本身的position,不能設置哦relative也不行,反正就是都不行。get
誰曾想,我在本身的組件把position刪掉了又出現了另外一個問題,打印顯示回調成功,可是界面並無滾動,通過查找發現是page.js的配置出現了問題,這個項目原來設置了不讓滾動,我簡直無語了hhhit
最後只須要把這個配置'disableScroll': true 刪掉就能夠了,由於默認的就是容許滾動。