仿簡(jiǎn)書jquery動(dòng)態(tài)修改用戶頭像

WEB系統(tǒng)開發(fā)中用戶資料修改一般都會(huì)涉及頭像更換畜伐,簡(jiǎn)書中“設(shè)置”->"基礎(chǔ)設(shè)置"中的頭像更換就是一種比較不錯(cuò)的方式丈咐,動(dòng)態(tài)更換瑞眼,圖片壓縮,實(shí)施生效棵逊。特意看了下簡(jiǎn)書頭像上傳负拟,大致是默認(rèn)圖片上傳后直接壓縮為300x300大小的圖像,實(shí)時(shí)頭像進(jìn)行替換生效歹河。這里仿簡(jiǎn)書的頭像上傳,做了個(gè)demo花吟,下面就對(duì)如何實(shí)現(xiàn)這樣效果做個(gè)示例說明秸歧。

技術(shù)說明

為了實(shí)現(xiàn)ajax方式上傳頭像圖片,采用常用的js框架jquery,通過ajax提交POST請(qǐng)求實(shí)現(xiàn)圖片上傳衅澈,服務(wù)端使用php進(jìn)行請(qǐng)求處理键菱,并返回JSON格式結(jié)果,處理成功后今布,頁面對(duì)頭像進(jìn)行更新经备。
1.外部類庫:jquery-3.2.1.min.js
2.前端:html+javascript+css
3.后端:php5.6

界面效果

demo.png

前端編碼

#顯示頭div,提交form,其他html樣式代碼先略去
<div class="avatar">
  ![](../images/default-user.png)
</div>
<form id="uploadForm" enctype="multipart/form-data" method="post">
    <input type="file" name="file" id="file" accept="image/*" class="hide">更改頭像
>
</form>
<script lang="javascript">
    $(document).ready(function(){
        $("input[name='file']").change(function(){
            //FormData對(duì)象,
            //可以把form中所有表單元素的name與value組成一個(gè)queryString部默,提交到后臺(tái)侵蒙。
            //在使用Ajax提交時(shí),使用FormData對(duì)象可以減少拼接queryString的工作量
            var formData = new FormData();
            formData.append("file",$("input[name='file']")[0].files[0]);
            $.ajax({
                url:'upload-ajax.php',
                type:'post',
                data: formData,
                cache: false,
                processData: false,
                contentType: false,
                success:function(data){
                    console.log(data);
                    if(data.status=="fail"){
                        alert(data.message);
                    }
                    #根據(jù)上傳成功并返回壓縮后的圖片url傅蹂,更新img標(biāo)簽src屬性
                    if(data.status=="success"){
                        $(".avatar img").attr("src",data.url+"?"+new Date().getTime());
                    }
                },error:function(e){
                    console.log(e);
                }
            });
        });
    });
</script>
注意:這里加new Date().getTime()為失效瀏覽器緩存纷闺,每次更換頭像時(shí)能使用最新圖片
$(".avatar img").attr("src",data.url+"?"+new Date().getTime());

服務(wù)端代碼

#file:upload-ajax.php
<?php
if($_FILES["file"]["error"]){
    $result = array('status' => 'fail', 'message' => $_FILES["file"]["error"]);
}else{
    $dir = "../uploads/avatar/";  
    file_exists($dir) || (mkdir($dir,0777,true) && chmod($dir,0777));  
    try{
        
        if(!is_array($_FILES["file"]["name"])) {
            $ext = pathinfo($_FILES["file"]['name'])['extension'];
            
            $fileName = $dir.'avatar_'.$dUserId.'_300x300.'.$ext;  

            $width = 300;//縮放后的圖片寬度
            $height = 300;//縮放后的圖片高度
            $uploadimg = $_FILES["file"]["tmp_name"];
            list($src_w,$src_h,$src_type)=getimagesize($uploadimg);  // 獲取原圖尺寸類型
            $img = '';
            if($src_type==1){
                $img = imagecreatefromgif($uploadimg);  
            }else if($src_type==2){
                $img = imagecreatefromjpeg($uploadimg);  
            }else if($src_type==3){
                $img = imagecreatefrompng($uploadimg);  
            }
            $newimg = imagecreatetruecolor($width,$height);  
            imagecopyresampled($newimg,$img,0,0,0,0,$width,$height,$src_w,$src_h);  
            imagepng($newimg,$fileName);
            imagedestroy($newimg);
            imagedestroy($img);

            $result = array('status' => 'success','message'=>'','url' =>$fileName);
        }
    }catch(Exception $e){
        $result = array('status' => 'fail', 'message' =>$e);
    }
    
}
$jsonstring = json_encode($result);
header('Content-Type: application/json');
echo $jsonstring;
?>

整體效果

來看個(gè)小視頻吧_

總結(jié)說明

該功能技術(shù)點(diǎn)主要亮點(diǎn),一個(gè)是前端界面通過jquery實(shí)現(xiàn)ajax方式提交form請(qǐng)求份蝴,其中用到了FormData對(duì)象犁功;另一點(diǎn)是服務(wù)端php對(duì)POST請(qǐng)求上傳的圖片的壓縮裁剪處理。處理的過程中還需要了一些小問題婚夫,由于保存的用戶圖片名稱不變浸卦,每次前端為保證圖片能正常顯示替換,在url中增加了時(shí)間戳new Date().getTime()用來規(guī)避瀏覽器的緩存案糙。
PS:代碼僅僅實(shí)現(xiàn)功能效果限嫌,服務(wù)端代碼根據(jù)不同需要可以進(jìn)一步定制完善靴庆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萤皂,隨后出現(xiàn)的幾起案子撒穷,更是在濱河造成了極大的恐慌,老刑警劉巖裆熙,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件端礼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡入录,警方通過查閱死者的電腦和手機(jī)蛤奥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僚稿,“玉大人凡桥,你說我怎么就攤上這事∈赐” “怎么了缅刽?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蠢络。 經(jīng)常有香客問我衰猛,道長(zhǎng),這世上最難降的妖魔是什么刹孔? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任啡省,我火速辦了婚禮,結(jié)果婚禮上髓霞,老公的妹妹穿的比我還像新娘卦睹。我一直安慰自己,他們只是感情好方库,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布结序。 她就那樣靜靜地躺著,像睡著了一般纵潦。 火紅的嫁衣襯著肌膚如雪笼痹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天酪穿,我揣著相機(jī)與錄音凳干,去河邊找鬼。 笑死被济,一個(gè)胖子當(dāng)著我的面吹牛救赐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼经磅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼泌绣!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起预厌,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤阿迈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后轧叽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苗沧,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年炭晒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了待逞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡网严,死狀恐怖识樱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情震束,我是刑警寧澤怜庸,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站垢村,受9級(jí)特大地震影響割疾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肝断,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驰凛。 院中可真熱鬧胸懈,春花似錦、人聲如沸恰响。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胚宦。三九已至首有,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間枢劝,已是汗流浹背井联。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留您旁,地道東北人烙常。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鹤盒,于是被迫代替她去往敵國(guó)和親蚕脏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子侦副,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容