vue封裝圖片預覽全屏插件

注意:這個插件主要使用的是vue的Vue-Awesome-Swiper輪播插件.使用這個插件之前需要:

1.npm?install?vue-awesome-swiper?--save

2.在主要文件全局引入:

import?Vue?from?'vue'

import?VueAwesomeSwiper?from?'vue-awesome-swiper'

import?'swiper/dist/css/swiper.css'

Vue.use(VueAwesomeSwiper)

3.lookImages.vue如下:其中dataSourse是文件集合(所有文件數據钟病,可以是所有圖片文件,類型是數組)蛙婴,visible是判斷頁面是否顯示狀態(tài)躯砰。fileId是當前選中查看大圖文件id.(注意里面很多操作是因為項目邏輯處理的原因荞雏,可根據自己邏輯來刪掉一些)

預覽效果:上面點擊跳轉到某頁,下面可以滑動奔穿。點擊全屏可查看全屏磷瘤,f11可推出全屏。



<template>

? ? <div id="lookImages-page">

? ? ? <div class="lookImages" v-if="visible">

? ? ? ? ? <div class="lookImages-content">

? ? ? ? ? ? <div class="lookImages-returnBanner">

? ? ? ? ? ? ? <div class="lookImages-return" @click="subtract" v-if="fileIndex !== 0"><Icon type="ios-arrow-back" size="60"/></div>

? ? ? ? ? ? </div>

? ? ? ? ? ? <div class="lookImages-close" @click="returnTo"><Icon type="md-close" size="40"/></div>

? ? ? ? ? ? <div class="lookImages-top">

? ? ? ? ? ? ? ? <div class="lookImages-top-title">{{list[fileIndex] && list[fileIndex].fileName}}</div>

? ? ? ? ? ? ? ? <div class="flex1" style="z-index:99;"? @click="FullScreen" id="FullScreenImages">

? ? ? ? ? ? ? ? ? ? <img v-if="list[fileIndex] && list[fileIndex].path" :src="list[fileIndex].path"/>

? ? ? ? ? ? ? ? ? ? <img v-else-if="!list[fileIndex].path && list[fileIndex].response && list[fileIndex].response.url" :src="list[fileIndex].response.url"/>

? ? ? ? ? ? ? ? ? ? <img v-else-if="(!list[fileIndex].path && !list[fileIndex].response) && list[fileIndex].url" :src="list[fileIndex].url"/>

? ? ? ? ? ? ? ? ? ? <img v-else :src="list[fileIndex]"/>

? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? <!-- <div class="flex1" @click="FullScreen" id="FullScreenImages" style="position: absolute;top: 70px;z-index:9;">

? ? ? ? ? ? ? ? </div> -->

? ? ? ? ? ? ? ? <div class="lookImages-top-footer">

? ? ? ? ? ? ? ? ? ? <span @click="FullBtnScreen"><Icon type="md-expand" style="padding-right:15px;cursor:pointer;"/>全屏</span>

? ? ? ? ? ? ? ? ? ? <span @click="downLoadFile(list[fileIndex])"><Icon type="md-arrow-down" style="padding-right:15px;cursor:pointer;"/>下載</span>

? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? </div>

? ? ? ? ? ? <div class="lookImages-bottom">

? ? ? ? ? ? ? ? <div style="width:70%;margin:0 auto;">

? ? ? ? ? ? ? ? ? ? <div class="swiper swiperBox" v-swiper:swiper="swiperOption" ref="swiperBox">

? ? ? ? ? ? ? ? ? ? ? ? <div class="swiper-wrapper">

? ? ? ? ? ? ? ? ? ? ? ? ? ? <div class="swiper-slide"? v-for="(item, index) in list" :key="'swiperBox'+index">

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <img v-if="item.path" :src="item.path" class="lookImages-swipers" @click="selectImages(index)"/>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <img v-else-if="!item.path && item.response && item.response.url" :src="item.response.url" class="lookImages-swipers" @click="selectImages(index)"/>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <img v-else-if="(!item.path && !item.response) && item.url" :src="item.url" class="lookImages-swipers" @click="selectImages(index)"/>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? <img v-else :src="item" class="lookImages-swipers" @click="selectImages(index)"/>

? ? ? ? ? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? ? ? ? ? <div class="swiper-button-next swiper-button-white" style="height: 20px;"></div>

? ? ? ? ? ? ? ? ? ? <div class="swiper-button-prev swiper-button-white" style="height: 20px;"></div>

? ? ? ? ? ? ? ? </div>

? ? ? ? ? ? </div>

? ? ? ? ? ? <div class="lookImages-goBanner">

? ? ? ? ? ? ? ? <div class="lookImages-go" @click="add" v-if="fileIndex < (list.length - 1)"><Icon type="ios-arrow-forward" size="60"/></div>

? ? ? ? ? ? </div>

? ? ? ? ? </div>

? ? ? </div>

? ? </div>

</template>

<script>

export default {

? ? props: ['dataSourse', 'fileId', 'visible'],

? ? data() {

? ? ? ? return {

? ? ? ? ? ? fileIndex: 0,

? ? ? ? ? ? list: [],

? ? ? ? ? ? swiperOption: {

? ? ? ? ? ? ? ? // autoplay: true,

? ? ? ? ? ? ? ? speed: 1000,

? ? ? ? ? ? ? ? slidesPerView: 'auto',

? ? ? ? ? ? ? ? watchOverflow: true,

? ? ? ? ? ? ? ? navigation: {

? ? ? ? ? ? ? ? ? ? nextEl: '.swiper-button-next',

? ? ? ? ? ? ? ? ? ? prevEl: '.swiper-button-prev'

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? };

? ? },

? ? watch: {

? ? ? ? fileId(newVal, oldVal) {

? ? ? ? ? ? this.fileId = newVal;

? ? ? ? },

? ? ? ? visible(newVal, oldVal) {

? ? ? ? ? ? let that = this;

? ? ? ? ? ? let obj = [];

? ? ? ? ? ? console.log('this.dataSourse');

? ? ? ? ? ? console.log(this.dataSourse);

? ? ? ? ? ? this.dataSourse && this.dataSourse.forEach(function(x, i) {

? ? ? ? ? ? ? ? // console.log(x);

? ? ? ? ? ? ? ? if (x.id) {

? ? ? ? ? ? ? ? ? ? if (x.fileType) {

? ? ? ? ? ? ? ? ? ? ? ? let fileType = x.fileType;

? ? ? ? ? ? ? ? ? ? ? ? if (fileType === 'jpg' || fileType === 'jpeg' || fileType === 'png') {

? ? ? ? ? ? ? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? ? ? let len = null;

? ? ? ? ? ? ? ? ? ? ? ? let fileType = '';

? ? ? ? ? ? ? ? ? ? ? ? if (x.path) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? len = x.path.split('.').length;

? ? ? ? ? ? ? ? ? ? ? ? ? ? fileType = x.path.split('.')[len - 1].toLowerCase();

? ? ? ? ? ? ? ? ? ? ? ? } else if (!x.path && x.url) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? len = x.url.split('.').length;

? ? ? ? ? ? ? ? ? ? ? ? ? ? fileType = x.url.split('.')[len - 1].toLowerCase();

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? if (fileType === 'jpg' || fileType === 'jpeg' || fileType === 'png') {

? ? ? ? ? ? ? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? } else if (!x.id && x.response && x.response.id) {

? ? ? ? ? ? ? ? ? ? let len = x.response.url.split('.').length;

? ? ? ? ? ? ? ? ? ? let fileType = x.response.url.split('.')[len - 1].toLowerCase();

? ? ? ? ? ? ? ? ? ? if (fileType === 'jpg' || fileType === 'jpeg' || fileType === 'png') {

? ? ? ? ? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? ? ? // console.log('sdsds', obj);

? ? ? ? ? ? this.list = obj;

? ? ? ? ? ? obj.forEach(function(x, i) {

? ? ? ? ? ? ? ? if (x.id) {

? ? ? ? ? ? ? ? ? ? if (x.id === that.fileId) {

? ? ? ? ? ? ? ? ? ? ? ? that.fileIndex = i;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? if (i === that.fileId) {

? ? ? ? ? ? ? ? ? ? ? ? that.fileIndex = i;

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? }

? ? },

? ? mounted() {

? ? ? ? // console.log('fileId', this.fileId, this.dataSourse);

? ? ? ? let that = this;

? ? ? ? let obj = [];

? ? ? ? this.dataSourse && this.dataSourse.forEach(function(x, i) {

? ? ? ? ? ? if (x.id) {

? ? ? ? ? ? ? ? if (x.fileType) {

? ? ? ? ? ? ? ? ? ? let fileType = x.fileType;

? ? ? ? ? ? ? ? ? ? if (fileType === 'jpg' || fileType === 'jpeg' || fileType === 'png') {

? ? ? ? ? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? let len = null;

? ? ? ? ? ? ? ? ? ? let fileType = '';

? ? ? ? ? ? ? ? ? ? if (x.path) {

? ? ? ? ? ? ? ? ? ? ? ? len = x.path.split('.').length;

? ? ? ? ? ? ? ? ? ? ? ? fileType = x.path.split('.')[len - 1].toLowerCase();

? ? ? ? ? ? ? ? ? ? } else if (!x.path && x.url) {

? ? ? ? ? ? ? ? ? ? ? ? len = x.url.split('.').length;

? ? ? ? ? ? ? ? ? ? ? ? fileType = x.url.split('.')[len - 1].toLowerCase();

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? if (fileType === 'jpg' || fileType === 'jpeg' || fileType === 'png') {

? ? ? ? ? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? } else if (!x.id && x.response && x.response.id) {

? ? ? ? ? ? ? ? let len = x.response.url.split('.').length;

? ? ? ? ? ? ? ? let fileType = x.response.url.split('.')[len - 1].toLowerCase();

? ? ? ? ? ? ? ? if (fileType === 'jpg' || fileType === 'jpeg' || fileType === 'png') {

? ? ? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? obj.push(x);

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? this.list = obj;

? ? ? ? obj.forEach(function(x, i) {

? ? ? ? ? ? if (x.id) {

? ? ? ? ? ? ? ? if (x.id === that.fileId) {

? ? ? ? ? ? ? ? ? ? that.fileIndex = i;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? if (i === that.fileId) {

? ? ? ? ? ? ? ? ? ? that.fileIndex = i;

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? });

? ? ? ? // console.log(this.fileId);

? ? ? ? // console.log(this.fileIndex);

? ? },

? ? methods: {

? ? ? ? returnTo() {

? ? ? ? ? ? console.log('returnTo');

? ? ? ? ? ? // this.visible = false;

? ? ? ? ? ? this.$emit('close');

? ? ? ? },

? ? ? ? selectImages(index) {

? ? ? ? ? ? this.fileIndex = index;

? ? ? ? },

? ? ? ? subtract() {

? ? ? ? ? ? this.fileIndex--;

? ? ? ? },

? ? ? ? add() {

? ? ? ? ? ? this.fileIndex++;

? ? ? ? },

? ? ? ? FullScreen(e) {

? ? ? ? ? ? var el = e.srcElement || e.target;

? ? ? ? ? ? var isFullscreen = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;

? ? ? ? ? ? // target兼容Firefox

? ? ? ? ? ? // el.innerHTML === '<img src="' + this.list[this.fileIndex].path + '"style="width:100%;height:100%;"/>' ? el.innerHTML = '退出全屏' : el.innerHTML = '<img src="' + this.list[this.fileIndex].path + '"style="width:100%;height:100%;"/>';

? ? ? ? ? ? // console.log('document.fullScreen', isFullscreen);

? ? ? ? ? ? if (!isFullscreen) {

? ? ? ? ? ? ? ? // 進入全屏,多重短路表達式

? ? ? ? ? ? ? ? (el.requestFullscreen && el.requestFullscreen()) ||

? ? ? ? ? ? ? ? (el.mozRequestFullScreen && el.mozRequestFullScreen()) ||

? ? ? ? ? ? ? ? (el.webkitRequestFullscreen && el.webkitRequestFullscreen()) || (el.msRequestFullscreen && el.msRequestFullscreen());

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? // 退出全屏,三目運算符

? ? ? ? ? ? ? ? document.exitFullscreen ? document.exitFullscreen() : '';

? ? ? ? ? ? ? ? document.mozCancelFullScreen ? document.mozCancelFullScreen() : '';

? ? ? ? ? ? ? ? document.webkitExitFullscreen ? document.webkitExitFullscreen() : '';

? ? ? ? ? ? }

? ? ? ? },

? ? ? ? FullBtnScreen(e) {

? ? ? ? ? ? document.getElementById('FullScreenImages').click();

? ? ? ? },

? ? ? ? downLoadFile(item) {

? ? ? ? ? ? // window.location.href = item.path;

? ? ? ? ? ? if (item.path) {

? ? ? ? ? ? ? ? window.open(item.path);

? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? window.open(item);

? ? ? ? ? ? }

? ? ? ? }

? ? }

};

</script>

<style scoped>

#lookImages-page .swiper-button-prev.swiper-button-disabled, .swiper-button-next.swiper-button-disabled{

? ? opacity: 0 !important;

}

#lookImages-page .swiper-button-prev{

? left: 8% !important;

? cursor: pointer !important;

}

#lookImages-page .swiper-button-next{

? right: 8% !important;

? cursor: pointer !important;

}

#lookImages-page .swiper-slide{

? ? width: auto !important;

}

html:-moz-full-screen {

? ? background: grey;

}

html:-webkit-full-screen {

? ? background: grey;

}

html:fullscreen {

? ? background: grey;

}

#lookImages-page .lookImages-return{

? ? color: #fff;

? ? position: absolute;

? ? top: 50%;

? ? margin-top: -30px;

? ? cursor:pointer;

}

#lookImages-page .lookImages-goBanner{

? ? color: #fff;

? ? position: absolute;

? ? right: 8%;

? ? cursor: pointer;

? ? height: calc(100% - 228px);

? ? width: 60px;

}

#lookImages-page .lookImages-returnBanner{

? ? color: #fff;

? ? position: absolute;

? ? left: 8%;

? ? cursor: pointer;

? ? height: calc(100% - 228px);

? ? width: 60px;

}

#lookImages-page .lookImages-go{

? ? color: #fff;

? ? position: absolute;

? ? right: 0;

? ? top:50%;

? ? margin-top: -30px;

? ? cursor: pointer;

}

#lookImages-page .lookImages-close{

? ? position: absolute;

? ? top: 20px;

? ? right: 20px;

? ? color: #fff;

? ? width: 50px;

? ? height: 50px;

? ? text-align: center;

? ? line-height: 50px;

? ? cursor:pointer;

}

#lookImages-page .lookImages-top-title{

? ? color: #fff;

? ? font-size: 24px;

? ? font-weight: bold;

? ? padding: 17px 0;

}

#lookImages-page .lookImages-top-footer{

? ? text-align: right;

? ? color: #fff;

? ? padding: 13px 0 16px 0;

? ? font-size: 24px;

? ? max-height: 65px;

? ? overflow: hidden;

}

#lookImages-page .lookImages-swipers{

? ? width: 170px;

? ? height: 115px;

? ? margin-right: 10px;

? ? cursor:pointer;

}

#lookImages-page .lookImages{

? ? position: fixed;

? ? top: 0;

? ? width: 100%;

? ? height: 100vh;

? ? background-color: #181818;

? ? left: 0;

? ? z-index: 99;

}

#lookImages-page .lookImages-top{

? ? -webkit-box-flex: 1;? ? ? /* OLD - iOS 6-, Safari 3.1-6 */

? ? -moz-box-flex: 1;? ? ? ? /* OLD - Firefox 19- */

? ? -webkit-flex: 1;? ? ? ? ? /* Chrome */

? ? -ms-flex: 1;? ? ? ? ? ? ? /* IE 10 */

? ? flex: 1;

? ? display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */

? ? display: -moz-box; /* Firefox 17- */

? ? display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */

? ? display: -moz-flex; /* Firefox 18+ */

? ? display: -ms-flexbox; /* IE 10 */

? ? display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */

? ? flex-direction: column;

? ? width: 70%;

? ? margin: 0 auto;

? ? position:relative;

? ? overflow:hidden;

}

#lookImages-page .lookImages-bottom{

? ? text-align: center;

? ? padding: 25px 0 23px 0;

? ? background-color: #000;

? ? overflow-x: auto;

? ? position: relative;

}

#lookImages-page .lookImages-content{

? ? display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */

? ? display: -moz-box; /* Firefox 17- */

? ? display: -webkit-flex; /* Chrome 21+, Safari 6.1+, iOS Safari 7+, Opera 15/16 */

? ? display: -moz-flex; /* Firefox 18+ */

? ? display: -ms-flexbox; /* IE 10 */

? ? display: flex; /* Chrome 29+, Firefox 22+, IE 11+, Opera 12.1/17/18, Android 4.4+ */

? ? -moz-box-direction:normal;

? ? flex-direction:column;

? ? -webkit-flex-direction:column;

? ? flex-direction: column;

? ? height: 100vh;

? ? overflow:hidden;

}

#lookImages-page .flex1{

? ? -webkit-box-flex: 1;? ? ? /* OLD - iOS 6-, Safari 3.1-6 */

? ? -moz-box-flex: 1;? ? ? ? /* OLD - Firefox 19- */

? ? -webkit-flex: 1;? ? ? ? ? /* Chrome */

? ? -ms-flex: 1;? ? ? ? ? ? /* IE 10 */

? ? flex: 1;

? ? overflow:hidden;

}

#lookImages-page .lookImages-top img{

? ? width:100%;

? ? height:100%;

}

</style>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末茂洒,一起剝皮案震驚了整個濱河市孟岛,隨后出現的幾起案子,更是在濱河造成了極大的恐慌督勺,老刑警劉巖渠羞,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異智哀,居然都是意外死亡次询,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門盏触,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渗蟹,“玉大人,你說我怎么就攤上這事赞辩〈蒲浚” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵辨嗽,是天一觀的道長世落。 經常有香客問我,道長糟需,這世上最難降的妖魔是什么屉佳? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮洲押,結果婚禮上武花,老公的妹妹穿的比我還像新娘。我一直安慰自己杈帐,他們只是感情好体箕,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挑童,像睡著了一般累铅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上站叼,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天娃兽,我揣著相機與錄音,去河邊找鬼尽楔。 笑死投储,一個胖子當著我的面吹牛第练,可吹牛的內容都是我干的。 我是一名探鬼主播轻要,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼复旬,長吁一口氣:“原來是場噩夢啊……” “哼垦缅!你這毒婦竟也來了冲泥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤壁涎,失蹤者是張志新(化名)和其女友劉穎凡恍,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體怔球,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嚼酝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了竟坛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闽巩。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖担汤,靈堂內的尸體忽然破棺而出涎跨,到底是詐尸還是另有隱情,我是刑警寧澤崭歧,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布隅很,位于F島的核電站,受9級特大地震影響率碾,放射性物質發(fā)生泄漏叔营。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一所宰、第九天 我趴在偏房一處隱蔽的房頂上張望绒尊。 院中可真熱鬧,春花似錦仔粥、人聲如沸婴谱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勘究。三九已至,卻和暖如春斟冕,著一層夾襖步出監(jiān)牢的瞬間口糕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工磕蛇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留景描,地道東北人十办。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像超棺,于是被迫代替她去往敵國和親向族。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354