mobileSelect.js

/*!

* mobileSelect.js

* (c) 2017-present onlyhom

* Released under the MIT License.

*/

(function() {

function getClass(dom,string) {

return dom.getElementsByClassName(string);

}

//构造器

function MobileSelect(config) {

this.mobileSelect;

this.wheelsData = config.wheels;

this.jsonType =  false;

this.cascadeJsonData = [];

this.displayJson = [];

this.cascade = false;

this.startY;

this.moveEndY;

this.moveY;

this.oldMoveY;

this.offset = 0;

this.offsetSum = 0;

this.oversizeBorder;

this.curDistance = [];

this.clickStatus = false;

this.isPC = true;

this.init(config);

}

MobileSelect.prototype = {

constructor: MobileSelect,

init: function(config){

var _this = this;

_this.keyMap = config.keyMap ? config.keyMap : {id:'id', value:'value', childs:'childs'};

_this.checkDataType();

_this.renderWheels(_this.wheelsData, config.cancelBtnText, config.ensureBtnText);

_this.trigger = document.querySelector(config.trigger);

if(!_this.trigger){

console.error('mobileSelect has been successfully installed, but no trigger found on your page.');

return false;

}

_this.wheel = getClass(_this.mobileSelect,'wheel');

_this.slider = getClass(_this.mobileSelect,'selectContainer');

_this.wheels = _this.mobileSelect.querySelector('.wheels');

_this.liHeight = _this.mobileSelect.querySelector('li').offsetHeight;

_this.ensureBtn = _this.mobileSelect.querySelector('.ensure');

_this.cancelBtn = _this.mobileSelect.querySelector('.cancel');

_this.grayLayer = _this.mobileSelect.querySelector('.grayLayer');

_this.popUp = _this.mobileSelect.querySelector('.content');

_this.callback = config.callback ? config.callback : function(){};

_this.transitionEnd = config.transitionEnd ? config.transitionEnd : function(){};

_this.initPosition = config.position ? config.position : [];

_this.titleText = config.title ? config.title : '';

_this.connector = config.connector ? config.connector : ' ';

_this.trigger.style.cursor='pointer';

_this.setStyle(config);

_this.setTitle(_this.titleText);

_this.checkIsPC();

_this.checkCascade();

if (_this.cascade) {

_this.initCascade();

}

//定位 初始位置

if(_this.initPosition.length < _this.slider.length){

var diff = _this.slider.length - _this.initPosition.length;

for(var i=0; i<diff; i++){

_this.initPosition.push(0);

}

}

_this.setCurDistance(_this.initPosition);

_this.addListenerAll();

//按钮监听

_this.cancelBtn.addEventListener('click',function(){

_this.mobileSelect.classList.remove('mobileSelect-show');

    });

    _this.ensureBtn.addEventListener('click',function(){

_this.mobileSelect.classList.remove('mobileSelect-show');

var tempValue ='';

    for(var i=0; i<_this.wheel.length; i++){

    i==_this.wheel.length-1 ? tempValue += _this.getInnerHtml(i) : tempValue += _this.getInnerHtml(i) + _this.connector;

    }

    _this.trigger.innerHTML = tempValue;

    _this.callback(_this.getIndexArr(),_this.getValue());

    });

    _this.trigger.addEventListener('click',function(){

    _this.mobileSelect.classList.add('mobileSelect-show');

    });

    _this.grayLayer.addEventListener('click',function(){

    _this.mobileSelect.classList.remove('mobileSelect-show');

    });

    _this.popUp.addEventListener('click',function(){

    event.stopPropagation();

    });

_this.fixRowStyle(); //修正列数

},

setTitle: function(string){

var _this = this;

_this.titleText = string;

_this.mobileSelect.querySelector('.title').innerHTML = _this.titleText;

},

setStyle: function(config){

var _this = this;

if(config.ensureBtnColor){

_this.ensureBtn.style.color = config.ensureBtnColor;

}

if(config.cancelBtnColor){

_this.cancelBtn.style.color = config.cancelBtnColor;

}

if(config.titleColor){

_this.title = _this.mobileSelect.querySelector('.title');

_this.title.style.color = config.titleColor;

}

if(config.textColor){

_this.panel = _this.mobileSelect.querySelector('.panel');

_this.panel.style.color = config.textColor;

}

if(config.titleBgColor){

_this.btnBar = _this.mobileSelect.querySelector('.btnBar');

_this.btnBar.style.backgroundColor = config.titleBgColor;

}

if(config.bgColor){

_this.panel = _this.mobileSelect.querySelector('.panel');

_this.shadowMask = _this.mobileSelect.querySelector('.shadowMask');

_this.panel.style.backgroundColor = config.bgColor;

_this.shadowMask.style.background = 'linear-gradient(to bottom, '+ config.bgColor + ', rgba(255, 255, 255, 0), '+ config.bgColor + ')';

}

},

checkIsPC: function(){

var _this = this;

    var sUserAgent = navigator.userAgent.toLowerCase();

    var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";

    var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";

    var bIsMidp = sUserAgent.match(/midp/i) == "midp";

    var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";

    var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";

    var bIsAndroid = sUserAgent.match(/android/i) == "android";

    var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";

    var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";

    if ((bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM)) {

        _this.isPC = false;

    }

},

show: function(){

    this.mobileSelect.classList.add('mobileSelect-show');

},

renderWheels: function(wheelsData, cancelBtnText, ensureBtnText){

var _this = this;

var cancelText = cancelBtnText ? cancelBtnText : '取消';

var ensureText = ensureBtnText ? ensureBtnText : '确认';

_this.mobileSelect = document.createElement("div");

_this.mobileSelect.className = "mobileSelect";

_this.mobileSelect.innerHTML =

    '<div class="grayLayer"></div>'+

        '<div class="content">'+

            '<div class="btnBar">'+

                '<div class="fixWidth">'+

                    '<div class="cancel">'+ cancelText +'</div>'+

                    '<div class="title"></div>'+

                    '<div class="ensure">'+ ensureText +'</div>'+

                '</div>'+

            '</div>'+

            '<div class="panel">'+

                '<div class="fixWidth">'+

                '<div class="wheels">'+

                '</div>'+

                    '<div class="selectLine"></div>'+

                    '<div class="shadowMask"></div>'+

                '</div>'+

            '</div>'+

        '</div>';

    document.body.appendChild(_this.mobileSelect);

//根据数据长度来渲染

var tempHTML='';

for(var i=0; i<wheelsData.length; i++){

//列

tempHTML += '<div class="wheel"><ul class="selectContainer">';

if(_this.jsonType){

for(var j=0; j<wheelsData[i].data.length; j++){

//行

tempHTML += '<li data-id="'+wheelsData[i].data[j][_this.keyMap.id]+'">'+wheelsData[i].data[j][_this.keyMap.value]+'</li>';

}

}else{

for(var j=0; j<wheelsData[i].data.length; j++){

//行

tempHTML += '<li>'+wheelsData[i].data[j]+'</li>';

}

}

tempHTML += '</ul></div>';

}

_this.mobileSelect.querySelector('.wheels').innerHTML = tempHTML;

},

addListenerAll: function(){

var _this = this;

for(var i=0; i<_this.slider.length; i++){

//手势监听

(function (i) {

_this.addListenerWheel(_this.wheel[i], i);

_this.addListenerLi(i);

})(i);

}

},

addListenerWheel: function(theWheel, index){

var _this = this;

theWheel.addEventListener('touchstart', function () {

_this.touch(event, this.firstChild, index);

},false);

theWheel.addEventListener('touchend', function () {

_this.touch(event, this.firstChild, index);

},false);

theWheel.addEventListener('touchmove', function () {

_this.touch(event, this.firstChild, index);

},false);

if(_this.isPC){

//如果是PC端则再增加拖拽监听 方便调试

theWheel.addEventListener('mousedown', function () {

_this.dragClick(event, this.firstChild, index);

},false);

theWheel.addEventListener('mousemove', function () {

_this.dragClick(event, this.firstChild, index);

},false);

theWheel.addEventListener('mouseup', function () {

_this.dragClick(event, this.firstChild, index);

},true);

}

},

addListenerLi:function(sliderIndex){

var _this = this;

var curWheelLi = _this.slider[sliderIndex].getElementsByTagName('li');

for(var j=0; j<curWheelLi.length;j++){

(function (j) {

curWheelLi[j].addEventListener('click',function(){

_this.singleClick(this, j, sliderIndex);

},false);

})(j);

}

},

checkDataType: function(){

var _this = this;

if(typeof(_this.wheelsData[0].data[0])=='object'){

_this.jsonType = true;

}

},

checkCascade: function(){

var _this = this;

if(_this.jsonType){

var node = _this.wheelsData[0].data;

for(var i=0; i<node.length; i++){

if(_this.keyMap.childs in node[i] && node[i][_this.keyMap.childs].length > 0){

_this.cascade = true;

_this.cascadeJsonData = _this.wheelsData[0].data;

break;

}

}

}else{

_this.cascade = false;

}

},

generateArrData: function (targetArr) {

var tempArr = [];

var keyMap_id = this.keyMap.id;

var keyMap_value = this.keyMap.value;

for(var i=0; i<targetArr.length; i++){

var tempObj = {};

tempObj[keyMap_id] = targetArr[i][this.keyMap.id];

tempObj[keyMap_value] = targetArr[i][this.keyMap.value];

tempArr.push(tempObj);

}

return tempArr;

},

initCascade: function(){

var _this = this;

_this.displayJson.push(_this.generateArrData(_this.cascadeJsonData));

if(_this.initPosition.length>0){

_this.initDeepCount = 0;

_this.initCheckArrDeep(_this.cascadeJsonData[_this.initPosition[0]]);

}else{

_this.checkArrDeep(_this.cascadeJsonData[0]);

}

_this.reRenderWheels();

},

initCheckArrDeep: function (parent) {

var _this = this;

if(parent){

if (_this.keyMap.childs in parent && parent[_this.keyMap.childs].length > 0) {

_this.displayJson.push(_this.generateArrData(parent[_this.keyMap.childs]));

_this.initDeepCount++;

var nextNode = parent[_this.keyMap.childs][_this.initPosition[_this.initDeepCount]];

if(nextNode){

_this.initCheckArrDeep(nextNode);

}else{

_this.checkArrDeep(parent[_this.keyMap.childs][0]);

}

}

}

},

checkArrDeep: function (parent) {

//检测子节点深度  修改 displayJson

var _this = this;

if(parent){

if (_this.keyMap.childs in parent && parent[_this.keyMap.childs].length > 0) {

_this.displayJson.push(_this.generateArrData(parent[_this.keyMap.childs])); //生成子节点数组

_this.checkArrDeep(parent[_this.keyMap.childs][0]);//检测下一个子节点

}

}

},

checkRange: function(index, posIndexArr){

var _this = this;

var deleteNum = _this.displayJson.length-1-index;

for(var i=0; i<deleteNum; i++){

_this.displayJson.pop(); //修改 displayJson

}

var resultNode;

for (var i = 0; i <= index; i++){

if (i == 0)

resultNode = _this.cascadeJsonData[posIndexArr[0]];

else {

resultNode = resultNode[_this.keyMap.childs][posIndexArr[i]];

}

}

_this.checkArrDeep(resultNode);

//console.log(_this.displayJson);

_this.reRenderWheels();

_this.fixRowStyle();

_this.setCurDistance(_this.resetPostion(index, posIndexArr));

},

resetPostion: function(index, posIndexArr){

var _this = this;

var tempPosArr = posIndexArr;

var tempCount;

if(_this.slider.length > posIndexArr.length){

tempCount = _this.slider.length - posIndexArr.length;

for(var i=0; i<tempCount; i++){ 

tempPosArr.push(0);

}

}else if(_this.slider.length < posIndexArr.length){

tempCount = posIndexArr.length - _this.slider.length;

for(var i=0; i<tempCount; i++){

tempPosArr.pop();

}

}

for(var i=index+1; i< tempPosArr.length; i++){

tempPosArr[i] = 0;

}

return tempPosArr;

},

reRenderWheels: function(){

var _this = this;

//删除多余的wheel

if(_this.wheel.length > _this.displayJson.length){

var count = _this.wheel.length - _this.displayJson.length;

for(var i=0; i<count; i++){

_this.wheels.removeChild(_this.wheel[_this.wheel.length-1]);

}

}

for(var i=0; i<_this.displayJson.length; i++){

//列

(function (i) {

var tempHTML='';

if(_this.wheel[i]){

//console.log('插入Li');

for(var j=0; j<_this.displayJson[i].length; j++){

//行

tempHTML += '<li data-id="'+_this.displayJson[i][j][_this.keyMap.id]+'">'+_this.displayJson[i][j][_this.keyMap.value]+'</li>';

}

_this.slider[i].innerHTML = tempHTML;

}else{

var tempWheel = document.createElement("div");

tempWheel.className = "wheel";

tempHTML = '<ul class="selectContainer">';

for(var j=0; j<_this.displayJson[i].length; j++){

//行

tempHTML += '<li data-id="'+_this.displayJson[i][j][_this.keyMap.id]+'">'+_this.displayJson[i][j][_this.keyMap.value]+'</li>';

}

tempHTML += '</ul>';

tempWheel.innerHTML = tempHTML;

_this.addListenerWheel(tempWheel, i);

    _this.wheels.appendChild(tempWheel);

}

_this.addListenerLi(i);

})(i);

}

},

updateWheels:function(data){

var _this = this;

if(_this.cascade){

_this.cascadeJsonData = data;

_this.displayJson = [];

_this.initCascade();

if(_this.initPosition.length < _this.slider.length){

var diff = _this.slider.length - _this.initPosition.length;

for(var i=0; i<diff; i++){

_this.initPosition.push(0);

}

}

_this.setCurDistance(_this.initPosition);

_this.fixRowStyle();

}

},

updateWheel: function(sliderIndex, data){

var _this = this;

var tempHTML='';

    if(_this.cascade){

    console.error('级联格式不支持updateWheel(),请使用updateWheels()更新整个数据源');

return false;

    }

    else if(_this.jsonType){

for(var j=0; j<data.length; j++){

tempHTML += '<li data-id="'+data[j][_this.keyMap.id]+'">'+data[j][_this.keyMap.value]+'</li>';

}

_this.wheelsData[sliderIndex] = {data: data};

    }else{

for(var j=0; j<data.length; j++){

tempHTML += '<li>'+data[j]+'</li>';

}

_this.wheelsData[sliderIndex] = data;

    }

_this.slider[sliderIndex].innerHTML = tempHTML;

_this.addListenerLi(sliderIndex);

},

fixRowStyle: function(){

var _this = this;

var width = (100/_this.wheel.length).toFixed(2);

for(var i=0; i<_this.wheel.length; i++){

_this.wheel[i].style.width = width+'%';

}

},

    getIndex: function(distance){

        return Math.round((2*this.liHeight-distance)/this.liHeight);

    },

    getIndexArr: function(){

    var _this = this;

    var temp = [];

    for(var i=0; i<_this.curDistance.length; i++){

    temp.push(_this.getIndex(_this.curDistance[i]));

    }

    return temp;

    },

    getValue: function(){

    var _this = this;

    var temp = [];

    var positionArr = _this.getIndexArr();

    if(_this.cascade){

    for(var i=0; i<_this.wheel.length; i++){

    temp.push(_this.displayJson[i][positionArr[i]]);

    }

    }

    else if(_this.jsonType){

    for(var i=0; i<_this.curDistance.length; i++){

    temp.push(_this.wheelsData[i].data[_this.getIndex(_this.curDistance[i])]);

    }

    }else{

    for(var i=0; i<_this.curDistance.length; i++){

    temp.push(_this.getInnerHtml(i));

    }

    }

    return temp;

    },

    calcDistance: function(index){

return 2*this.liHeight-index*this.liHeight;

    },

    setCurDistance: function(indexArr){

    var _this = this;

    var temp = [];

    for(var i=0; i<_this.slider.length; i++){

    temp.push(_this.calcDistance(indexArr[i]));

    _this.movePosition(_this.slider[i],temp[i]);

    }

    _this.curDistance = temp;

    },

    fixPosition: function(distance){

        return -(this.getIndex(distance)-2)*this.liHeight;

    },

    movePosition: function(theSlider, distance){

        theSlider.style.webkitTransform = 'translate3d(0,' + distance + 'px, 0)';

        theSlider.style.transform = 'translate3d(0,' + distance + 'px, 0)';

    },

    locatePostion: function(index, posIndex){

    this.curDistance[index] = this.calcDistance(posIndex);

    this.movePosition(this.slider[index],this.curDistance[index]);

    },

    updateCurDistance: function(theSlider, index){

        this.curDistance[index] = parseInt(theSlider.style.transform.split(',')[1]);

    },

    getDistance:function(theSlider){

    return parseInt(theSlider.style.transform.split(',')[1]);

    },

    getInnerHtml: function(sliderIndex){

    var _this = this;

    var index = _this.getIndex(_this.curDistance[sliderIndex]);

    return _this.slider[sliderIndex].getElementsByTagName('li')[index].innerHTML;

    },

    touch: function(event, theSlider, index){

    var _this = this;

    event = event || window.event;

    switch(event.type){

    case "touchstart":

        _this.startY = event.touches[0].clientY;

        _this.oldMoveY = _this.startY;

    break;

    case "touchend":

        _this.moveEndY = event.changedTouches[0].clientY;

        _this.offsetSum = _this.moveEndY - _this.startY;

//修正位置

        _this.updateCurDistance(theSlider, index);

        _this.curDistance[index] = _this.fixPosition(_this.curDistance[index]);

        _this.movePosition(theSlider, _this.curDistance[index]);

        _this.oversizeBorder = -(theSlider.getElementsByTagName('li').length-3)*_this.liHeight;

        //反弹

        if(_this.curDistance[index] + _this.offsetSum > 2*_this.liHeight){

            _this.curDistance[index] = 2*_this.liHeight;

            setTimeout(function(){

                _this.movePosition(theSlider, _this.curDistance[index]);

            }, 100);

        }else if(_this.curDistance[index] + _this.offsetSum < _this.oversizeBorder){

            _this.curDistance[index] = _this.oversizeBorder;

            setTimeout(function(){

                _this.movePosition(theSlider, _this.curDistance[index]);

            }, 100);

        }

        _this.transitionEnd(_this.getIndexArr(),_this.getValue());

        if(_this.cascade){

        var tempPosArr = _this.getIndexArr();

        tempPosArr[index] = _this.getIndex(_this.curDistance[index]);

        _this.checkRange(index, tempPosArr);

        }

    break;

    case "touchmove":

        event.preventDefault();

        _this.moveY = event.touches[0].clientY;

        _this.offset = _this.moveY - _this.oldMoveY;

        _this.updateCurDistance(theSlider, index);

        _this.curDistance[index] = _this.curDistance[index] + _this.offset;

        _this.movePosition(theSlider, _this.curDistance[index]);

        _this.oldMoveY = _this.moveY;

    break;

    }

    },

    dragClick: function(event, theSlider, index){

    var _this = this;

    event = event || window.event;

    switch(event.type){

    case "mousedown":

        _this.startY = event.clientY;

        _this.oldMoveY = _this.startY;

        _this.clickStatus = true;

    break;

    case "mouseup":

        _this.moveEndY = event.clientY;

        _this.offsetSum = _this.moveEndY - _this.startY;

//修正位置

        _this.updateCurDistance(theSlider, index);

        _this.curDistance[index] = _this.fixPosition(_this.curDistance[index]);

        _this.movePosition(theSlider, _this.curDistance[index]);

        _this.oversizeBorder = -(theSlider.getElementsByTagName('li').length-3)*_this.liHeight;

        //反弹

        if(_this.curDistance[index] + _this.offsetSum > 2*_this.liHeight){

            _this.curDistance[index] = 2*_this.liHeight;

            setTimeout(function(){

                _this.movePosition(theSlider, _this.curDistance[index]);

            }, 100);

        }else if(_this.curDistance[index] + _this.offsetSum < _this.oversizeBorder){

            _this.curDistance[index] = _this.oversizeBorder;

            setTimeout(function(){

                _this.movePosition(theSlider, _this.curDistance[index]);

            }, 100);

        }

        _this.clickStatus = false;

        _this.transitionEnd(_this.getIndexArr(),_this.getValue());

        if(_this.cascade){

        var tempPosArr = _this.getIndexArr();

        tempPosArr[index] = _this.getIndex(_this.curDistance[index]);

        _this.checkRange(index, tempPosArr);

        }

    break;

    case "mousemove":

        event.preventDefault();

        if(_this.clickStatus){

        _this.moveY = event.clientY;

        _this.offset = _this.moveY - _this.oldMoveY;

        _this.updateCurDistance(theSlider, index);

        _this.curDistance[index] = _this.curDistance[index] + _this.offset;

        _this.movePosition(theSlider, _this.curDistance[index]);

        _this.oldMoveY = _this.moveY;

        }

    break;

    }

    },

    singleClick: function(theLi, index, sliderIndex){

    var _this = this;

        if(_this.cascade){

        var tempPosArr = _this.getIndexArr();

        tempPosArr[sliderIndex] = index;

        _this.checkRange(sliderIndex, tempPosArr);

        }else{

        _this.curDistance[sliderIndex] = (2-index)*_this.liHeight;

        _this.movePosition(theLi.parentNode, _this.curDistance[sliderIndex]);

        }

    }

};

if (typeof exports == "object") {

module.exports = MobileSelect;

} else if (typeof define == "function" && define.amd) {

define([], function () {

return MobileSelect;

})

} else {

window.MobileSelect = MobileSelect;

}

})();

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容