mobileSelect.js

/*!

* mobileSelect.js

* (c) 2017-present onlyhom

* Released under the MIT License.

*/

(function() {

function getClass(dom,string) {

return dom.getElementsByClassName(string);

}

//構(gòu)造器

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();

//按鈕監(jiān)聽

_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(); //修正列數(shù)

},

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 : '確認(rèn)';

_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);

//根據(jù)數(shù)據(jù)長(zhǎng)度來渲染

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++){

//手勢(shì)監(jiān)聽

(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端則再增加拖拽監(jiān)聽 方便調(diào)試

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) {

//檢測(cè)子節(jié)點(diǎn)深度? 修改 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])); //生成子節(jié)點(diǎn)數(shù)組

_this.checkArrDeep(parent[_this.keyMap.childs][0]);//檢測(cè)下一個(gè)子節(jié)點(diǎn)

}

}

},

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('級(jí)聯(lián)格式不支持updateWheel(),請(qǐng)使用updateWheels()更新整個(gè)數(shù)據(jù)源');

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;

}

})();

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玫坛,隨后出現(xiàn)的幾起案子结笨,更是在濱河造成了極大的恐慌,老刑警劉巖湿镀,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕吸,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡勉痴,警方通過查閱死者的電腦和手機(jī)赫模,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒸矛,“玉大人瀑罗,你說我怎么就攤上這事〕樱” “怎么了斩祭?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)乡话。 經(jīng)常有香客問我摧玫,道長(zhǎng),這世上最難降的妖魔是什么绑青? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任席赂,我火速辦了婚禮吮铭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘颅停。我一直安慰自己谓晌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布癞揉。 她就那樣靜靜地躺著纸肉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喊熟。 梳的紋絲不亂的頭發(fā)上柏肪,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音芥牌,去河邊找鬼烦味。 笑死,一個(gè)胖子當(dāng)著我的面吹牛壁拉,可吹牛的內(nèi)容都是我干的谬俄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弃理,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼溃论!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痘昌,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤钥勋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辆苔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體算灸,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年驻啤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乎婿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡街佑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捍靠,到底是詐尸還是另有隱情沐旨,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布榨婆,位于F島的核電站磁携,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏良风。R本人自食惡果不足惜谊迄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一闷供、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧统诺,春花似錦歪脏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至啄寡,卻和暖如春豪硅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挺物。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工懒浮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人识藤。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓砚著,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蹋岩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赖草,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,030評(píng)論 0 2
  • 找到fullcalendar.js, 找到代碼為 isRTL:false剪个,這句話 輸入以下幾句 monthName...
    迷你小小白閱讀 1,665評(píng)論 0 1
  • 4月1號(hào)秧骑,終于結(jié)束了半年的忙碌生活,可以去看櫻花啦扣囊,心里感覺美美噠乎折! 一進(jìn)園被櫻花的漂亮吸引,所以不自主的和...
    曉彤新閱讀 355評(píng)論 0 1
  • 初來乍到 不懂得那些華麗的言語(yǔ) 也不會(huì)所謂的四字成語(yǔ) 只希望聽聽自己內(nèi)心的聲音 用最平凡的文字記錄下當(dāng)時(shí)的心緒 遺...
    栤點(diǎn)Ball_miss然閱讀 177評(píng)論 0 0