初入weex--微信端實(shí)現(xiàn)點(diǎn)擊img調(diào)用本地相冊(cè)

隨筆:

隨著weex筐钟,rn潘拱,flutter等跨平臺(tái)框架的出現(xiàn)疹鳄,感覺對(duì)移動(dòng)端的沖擊還是蠻大的,但回頭想想也是芦岂,人也不能總是吃老本執(zhí)著當(dāng)下瘪弓,總歸要往前走的。

遇到的問(wèn)題:

剛寫weex禽最,在web上需要點(diǎn)擊圖片調(diào)用相冊(cè)杠茬,同時(shí)調(diào)用到的照片需要覆蓋到img上月褥。很簡(jiǎn)單的一個(gè)問(wèn)題,奈何是初學(xué)者瓢喉,一開始毫無(wú)頭緒宁赤。放在移動(dòng)端的話可能還好解決一點(diǎn),移動(dòng)端封裝個(gè)調(diào)相冊(cè)的方法給weex栓票,然后weex再調(diào)用下噼噼啪啪一頓操作就完事了(移動(dòng)端調(diào)用相冊(cè)應(yīng)該還是挺方便的决左,畢竟也算是基操了)。但這次是weex打包h5置于微信瀏覽器上走贪。佛猛。。坠狡。
哈哈哈嗝.png

谷歌百度找了半天看了看weex的社區(qū)继找,唔。逃沿。婴渡。罷了。凯亮。边臼。感覺還是多看看weex,vue的官網(wǎng)來(lái)的靠譜假消。解決步驟如下:

  • 既然是以h5的形式柠并,那么可以考慮下用js的方法。
  • 設(shè)置input type= file富拗,并設(shè)置透明放于img上臼予,這樣看起來(lái)就像點(diǎn)擊img跳出文件選擇,當(dāng)然也可以反過(guò)來(lái)啃沪,img置于input上粘拾,這兩個(gè)方法會(huì)在下面的單張跟多張中說(shuō)到(js我好像只能想到這個(gè)方法,還有什么方法的話感謝大佬指導(dǎo)下我)

既然有了思路谅阿,那半哟。。签餐。開擼寓涨?

開始

首先先新建個(gè)項(xiàng)目(如何新建跟vue-router、以及命名規(guī)范這些會(huì)在后面的文章中再寫)

這里有個(gè)小插曲氯檐,我在npm run serve的時(shí)候報(bào)了個(gè)錯(cuò)
小插曲.png

查了下戒良,說(shuō)是端口被占用的問(wèn)題,那把占用的程序關(guān)了就ok了冠摄。

單張圖片

上面已經(jīng)提到過(guò)了糯崎,最下面放img標(biāo)簽(如果ui圖沒(méi)有邊框的話可以自己設(shè)置個(gè)邊框)几缭,img上放個(gè)input標(biāo)簽,設(shè)置透明度opacity為 0;

代碼如下:

<template>
    <div class="pic">
        <div class="photo">
            <img alt="" class="photos" :src="pic" >
            <input type="file" accept="image/*"
                   @change="initPic($event)" />
        </div>
    </div>
</template>

<script>
    export default {
        name: "weex",
        data:()=>({
            pic:"https://upload-images.jianshu.io/upload_images/16290169-0cb4fa6f7cdb1e71.jpg" +
                "?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"
        }),
        methods:{
            initPic(e) {
                console.log(e);
                this.FileReader(e.target.files[0]);
            },
            FileReader(file) {
                let _this = this;
                let reader = new FileReader();
                reader.readAsDataURL(file);
                reader.onload = function (a) {
                    _this.pic = a.target.result;
                }
            },
        }
    }
</script>

樣式的話就不貼了吧沃呢;
代碼也是簡(jiǎn)單的就是這么幾行(ps:我寫的時(shí)候就沒(méi)那么容易了年栓,一開始不知道onchange事件里面如何傳遞事件,折騰了一會(huì)才發(fā)現(xiàn)可以用$event)薄霜,最后的成果如下:


1111.png
一張圖的成果.png

如果是只有一張圖的話某抓,那這次的任務(wù)就勉強(qiáng)完成了,下面說(shuō)說(shuō)多張圖片的情況惰瓜。

多張圖片(擴(kuò)展)

解決步驟如下:

  • 多張圖片如果按單張的寫法來(lái)寫的話否副,會(huì)出現(xiàn)每次進(jìn)來(lái)的時(shí)候都判斷一遍是哪張圖片產(chǎn)生的點(diǎn)擊事件,最好是進(jìn)來(lái)以后我就知道是哪個(gè)圖片而不是需要去判斷一次崎坊,那自然是用數(shù)組了
  • 上面的單張圖片是input置于img標(biāo)簽上备禀,那這次可以反過(guò)來(lái),img置于input標(biāo)簽上奈揍,通過(guò)點(diǎn)擊img事件來(lái)調(diào)用input的onclick事件

有人會(huì)說(shuō)了為什么要這么花里胡哨的曲尸,能用不就好了嗎,還反過(guò)來(lái)打月。其實(shí)我感覺寫代碼還是得需要多考慮考慮多種方法實(shí)現(xiàn)的好队腐。(ps:本來(lái)想代碼一步一步寫然后貼出來(lái)的蚕捉,但是比較懶奏篙,哈哈哈就貼成果了)代碼如下:

<template>
    <div class="pic">
        <div class="photo">
            <input type="file" accept="image/*"
                   @change="initPic($event,0)" :ref="'pic1'"/>
            <img alt="" class="photos" :src="pic[0]" @click="clicks('pic1')">

        </div>
        <div class="photo">
            <input type="file" accept="image/*" v-if="(pic[0].split(splitValue).length)===1"
                   @change="initPic($event,1)" :ref="'pic2'"/>
            <img alt="" class="photos" :src="pic[1]"
                 v-if="(pic[0].split(splitValue).length)===1" @click="clicks('pic2')">

        </div>
        <div class="photo">
            <input type="file" accept="image/*" v-if="(pic[1].split(splitValue).length)===1"
                   @change="initPic($event,2)" :ref="'pic3'"/>
            <img alt="" class="photos" :src="pic[2]"
                 v-if="(pic[1].split(splitValue).length)===1" @click="clicks('pic3')">

        </div>
    </div>
</template>

<script>
    export default {
        name: "weex",
        data: () => ({
            pic: ["https://upload-images.jianshu.io/upload_images/16290169-0cb4fa6f7cdb1e71.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                "https://upload-images.jianshu.io/upload_images/16290169-0cb4fa6f7cdb1e71.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240",
                "https://upload-images.jianshu.io/upload_images/16290169-0cb4fa6f7cdb1e71.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"],
            splitValue: "jianshu"
        }),
        methods: {
            clicks(e){
                if(e==="pic1"){
                    this.$refs.pic1.$el.click();
                }else if(e==="pic2"){
                    this.$refs.pic2.$el.click();
                }else if(e==="pic3"){
                    this.$refs.pic3.$el.click();
                }
            },
            initPic(e, index) {

                this.FileReader(e.target.files[0], index);
            },
            FileReader(file, index) {
                let _this = this;
                this.file = file;
                let reader = new FileReader();
                reader.readAsDataURL(file);
                reader.onload = function (a) {
                    _this.pic[index] = a.target.result;
                    _this.pic.push("");
                    _this.pic.splice(_this.pic.length-1,1);

                }
            }
        }
    }
</script>

大佬們不要打我,命名這些怎么簡(jiǎn)單怎么來(lái)嘛迫淹,簡(jiǎn)書嘛簡(jiǎn)單點(diǎn)秘通。本來(lái)是不會(huì)出現(xiàn)判斷是哪個(gè)img進(jìn)來(lái)的,但是由于需要展示通過(guò)點(diǎn)擊img來(lái)觸發(fā)input的click事件敛熬,所以就這樣寫了肺稀。成果如下:
三臉懵逼.png

總結(jié)

  1. v-bind的數(shù)據(jù)為數(shù)組的時(shí)候,只有當(dāng)數(shù)組的長(zhǎng)度改變視圖才會(huì)刷新數(shù)據(jù)应民。
  2. weex類似js中獲取指定控件的時(shí)候话原,可以通過(guò)ref來(lái)獲取,譬如設(shè)置 :ref="'pic1'"诲锹,在代碼中可以通過(guò) this.$refs.pic1 來(lái)獲取到該控件繁仁,這樣該控件的點(diǎn)擊事件啊,樣式之類的應(yīng)該都能獲取到了

weex小白归园,歡迎大佬指導(dǎo)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末黄虱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子庸诱,更是在濱河造成了極大的恐慌捻浦,老刑警劉巖晤揣,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異朱灿,居然都是意外死亡昧识,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門盗扒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滞诺,“玉大人,你說(shuō)我怎么就攤上這事环疼∠芭” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵炫隶,是天一觀的道長(zhǎng)淋叶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伪阶,這世上最難降的妖魔是什么煞檩? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮栅贴,結(jié)果婚禮上斟湃,老公的妹妹穿的比我還像新娘。我一直安慰自己檐薯,他們只是感情好凝赛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坛缕,像睡著了一般墓猎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赚楚,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天毙沾,我揣著相機(jī)與錄音,去河邊找鬼宠页。 笑死左胞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的举户。 我是一名探鬼主播烤宙,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼敛摘!你這毒婦竟也來(lái)了门烂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屯远,沒(méi)想到半個(gè)月后蔓姚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慨丐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年坡脐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片房揭。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡备闲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捅暴,到底是詐尸還是另有隱情恬砂,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布蓬痒,位于F島的核電站泻骤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏梧奢。R本人自食惡果不足惜狱掂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亲轨。 院中可真熱鬧趋惨,春花似錦、人聲如沸惦蚊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)养筒。三九已至曾撤,卻和暖如春端姚,著一層夾襖步出監(jiān)牢的瞬間晕粪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工渐裸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巫湘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓昏鹃,卻偏偏與公主長(zhǎng)得像尚氛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洞渤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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