私信對(duì)話框總結(jié)

題記

私信對(duì)話框,類似于QQ,微信等等這些社交軟件很常見的東西,但是實(shí)現(xiàn)起來卻有它自己的難度。頁面的實(shí)現(xiàn)還可以,關(guān)鍵就是下拉和上拉很自然的,感覺很不錯(cuò)。其實(shí)這都是好的,關(guān)鍵是用微信瀏覽器打開的網(wǎng)站默認(rèn)的下拉會(huì)出現(xiàn)如下情況:

默認(rèn)微信網(wǎng)頁下拉

是不是很煩,反正我覺得是!

解決方法

  • 世紀(jì)佳緣在這個(gè)地方處理的很好,它的網(wǎng)站上有類似的需求,下拉刷新,而且在微信的內(nèi)置瀏覽器中打開也不會(huì)出現(xiàn)以上那種默認(rèn)的形式,看它的源碼,尼瑪,什么和什么呀,完全看不下去,幾千行,看你妹夫,后來才發(fā)現(xiàn),它是把所有自定義的函數(shù)都寫在webchat_1.0.js,所以從這個(gè)著手困難太大。

    世紀(jì)佳緣文件

  • 度娘搜索了些許時(shí)間發(fā)現(xiàn)了iscroll.js這個(gè)插件。然后就瘋狂的看官網(wǎng),然后還有一個(gè)iscroll-master文件夾,下載下來,里面全是demos,反復(fù)研究。其實(shí)這樣就夠了,但是自己沒有經(jīng)驗(yàn)的毛病就暴漏出來了,走了很多彎路。比如我自己想的把滾動(dòng)條定位到最下面的方法:

setTimeout(function(){
    var scrollToTop = $("#wrapper")[0].scrollHeight;
    $("#wrapper").scrollTop(scrollToTop);
},200)

這樣就會(huì)出現(xiàn)很嚴(yán)重的問題,發(fā)送信息后定位到最下面,可是下一步的時(shí)候這個(gè)可以滑動(dòng)的部分就亂了,可以直接劃到很上面的地方然就就不見了(輸入的文字)。可是demos中明明有個(gè)很明顯的scroll-to-element啊,自己當(dāng)時(shí)沒有在意這個(gè),可是這個(gè)是解決問題的關(guān)鍵。
由于iscroll.js內(nèi)置scrollToElement函數(shù),則:

myScroll.scrollToElement("div.mes_me:nth-last-child(1)");

其中myScroll是每次調(diào)用的時(shí)候初始化的對(duì)象。


demos

至此基本可以解決我們現(xiàn)在的需求,那下面來談?wù)勑枨蟀伞?/p>

私信對(duì)話框需求(對(duì)話內(nèi)容部分)

  • user打開私信對(duì)話框,歷史的聊天記錄全部用jinjia2渲染出來,然后自動(dòng)定位到最下面的一條消息。
  • user點(diǎn)擊輸入框,輸入內(nèi)容,輸入完之后點(diǎn)擊發(fā)送,此時(shí)將輸入框里面的內(nèi)容ajax到后臺(tái)保存,成功就將之前的內(nèi)容append到對(duì)話框里面,同時(shí)定位到最下面,如果ajax發(fā)送到后臺(tái)失敗,則alert內(nèi)容提醒。這是我們原神帶我飛的。


    ajax代碼

不對(duì),突然發(fā)現(xiàn)一個(gè)問題,我的ajax好水呀,僅僅知道這個(gè)用法,其他的很長時(shí)間沒有使用了,不行,要復(fù)習(xí)復(fù)習(xí),做個(gè)簡書。

最后來看看現(xiàn)在的頁面效果


下拉ok

私信部分基本上就完成了,下面就談?wù)剛€(gè)人的學(xué)習(xí)體會(huì)。

學(xué)習(xí)體會(huì)

iscroll可以實(shí)現(xiàn)很多功能,常使用是:下拉加載上拉刷新。這兩個(gè)功能在QQ里面非常常見吧。下面就來詳細(xì)的學(xué)習(xí)下iscroll.js

使用方法

1.html

<div id= "wrapper">
    <div id="scroller">
        content
    </div>
</div>

如上:id是scroller的這個(gè)div是可以滑動(dòng)的部分。

2.引入iscroll.js,自定義loaded( )函數(shù),然后在里面將iscroll實(shí)例化,在$(document).ready()中調(diào)用loaded( )函數(shù)。

實(shí)例化

3.iscroll.js可以實(shí)現(xiàn)很多功能是在實(shí)例化中設(shè)置不同的參數(shù)。下面就簡要介紹這些參數(shù):

  • hScroll, 用來鎖定水平滾動(dòng),默認(rèn)情況下,水平和垂直滾動(dòng)都是支持的。如果被設(shè)定為false,則不能水平方向滾動(dòng).
  • vScroll, 用來鎖定垂直滾動(dòng)
  • bounce, enable/disable 當(dāng)滾動(dòng)超出范圍時(shí),是否有彈跳動(dòng)畫。
  • momentum, enable/disable inertia. Default: true. 設(shè)置是否開始慣性,如果想要節(jié)省計(jì)算資源,可以設(shè)置為false。
  • lockDirection, 當(dāng)元素在一個(gè)方向滾動(dòng)時(shí)(如水平),另一個(gè)方向(如垂直)的滾動(dòng)會(huì)被鎖定。
  • fixedScrollbar:在IOS中拖動(dòng)滾動(dòng)條的時(shí)候可能會(huì)使內(nèi)容(或滾動(dòng)條,)縮小,設(shè)置該參數(shù)為true可防止該現(xiàn)象。同樣適用于Android。Android默認(rèn)為true,IOS默認(rèn)為FALSE。


    參數(shù)設(shè)定

4.內(nèi)部方法

  • refresh( )
    iScroll需要知道滾動(dòng)區(qū)域的大小和滾動(dòng)條才可以正常的工作。在實(shí)例化的時(shí)候iScroll會(huì)自動(dòng)計(jì)算一次。但如果滾動(dòng)區(qū)域里的內(nèi)容發(fā)生變化后,需要告訴iScroll內(nèi)容發(fā)生了變化。這個(gè)很重要?。?!
  • scrollTo( ) + scrollToElement + scrollToPage
    scrollTo(x, y, time, relative)在time時(shí)間內(nèi)內(nèi)容滾動(dòng)的x/y距離,relative是boolean值,true表示相對(duì)現(xiàn)在的位置滑動(dòng)。
    scrollToElement(element, time)在指定的時(shí)間內(nèi)內(nèi)容滑動(dòng)設(shè)定的元素位置處。
    snapToPage(pageX, pageY, time)在time時(shí)間內(nèi)滑動(dòng)到設(shè)定的頁面。這一塊暫時(shí)沒需求還沒有學(xué)習(xí),等有需求時(shí)候分分鐘秒了它。

5.注銷
由于iScroll是全局內(nèi)容,所以用完之后就要銷毀它,清楚內(nèi)存。將其設(shè)置為null就ok了。

6.幾個(gè)實(shí)例demo

注意事項(xiàng)

  • 官方iscroll5下載的文件夾里面的iscroll.js實(shí)例化的對(duì)象是IScroll,而我用的則是iScroll,,這是一個(gè)坑,我弄了好久才發(fā)現(xiàn)。這是因?yàn)榍罢呤前姹?,而后者是版本4,使用的時(shí)候不要弄混了。其實(shí)用5的那幾個(gè)實(shí)例就很簡單了,自己走彎路去網(wǎng)上找別人的文檔,人家用的是版本4的。
  • 如果要實(shí)現(xiàn)下拉小菊花的效果,是在iScroll實(shí)例化中自定義一些函數(shù)。


    小菊花

參考文獻(xiàn)

私信對(duì)話框其他

  • qq表情是使用的jquery.qqFace.js,可以實(shí)現(xiàn)效果,但是現(xiàn)在有兩個(gè)問題:
    1:每次jinjia2渲染后將圖片解析成<img src="xxx">;
    2:每次點(diǎn)表情圖標(biāo)需要發(fā)送非常多的http請求,這是不合適的。
    待解決......
  • 關(guān)于輸入框輸入換行的時(shí)候自動(dòng)增加高度,然后會(huì)有一個(gè)max-height,這個(gè)實(shí)現(xiàn)使用的是autosize.js插件,暫時(shí)沒什么問題。
    小知識(shí)補(bǔ)充:設(shè)置textarea默認(rèn)的行數(shù)可以用cols="1" rows="1",這些屬性之前一直被我忽略的。

最后說

發(fā)現(xiàn)簡書寫東西感覺太爽歪歪了,直接截圖然后粘貼就會(huì)自動(dòng)有網(wǎng)址,非常方便,而且markdown語法寫東西也很酷,所以現(xiàn)階段就準(zhǔn)備一直用簡書寫東西,等水平達(dá)到一定的高度之后,再去博客園寫博客吧。

入前端時(shí)間不到一年,還在努力提升自己中,希望可以多交同行朋友,相互學(xué)習(xí),共同進(jìn)步。謝謝,新手寫文章,不喜勿噴,敬請指教。

人若無名,便可專心練劍。

hzhuang
2015.04.22 22.02

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,690評(píng)論 4 61
  • 在眾多輕食中,比較推崇的是,高顏值低卡路里的水果碗昔。傳說中的網(wǎng)紅Acai bowl,位于安福路的弄堂里面,性冷淡...
    逗貓弄狗閱讀 606評(píng)論 1 4
  • 文/木槿琳 “老板,給我一瓶藥效強(qiáng)一點(diǎn)的農(nóng)藥!” “喲,二妹,買農(nóng)藥殺草嗎?”老板面容慈祥,看著柜臺(tái)前瘦弱的女孩。...
    木槿琳閱讀 548評(píng)論 6 8
  • 引子:四年級(jí)的同學(xué)們?nèi)ネ獬龌顒?dòng),一般外出活動(dòng),我們都會(huì)要求兩件重要的事情:安全與文明禮儀。在這點(diǎn)上似乎沒有任何人反...
    天一讀書閱讀 379評(píng)論 0 1

友情鏈接更多精彩內(nèi)容