56個(gè)javascript實(shí)用工具函數(shù)

在瀏覽技術(shù)公眾號(hào)的時(shí)候發(fā)現(xiàn)這樣一篇文章僵井,覺得還是挺有用的血柳,所以在此收藏起來载庭,非原創(chuàng)哦辙纬,只是用來記錄一下豁遭,對(duì)于順序稍微整理了一下,以下是整體的一個(gè)功能分類概覽圖


3228aba5f641bd4417f891c61c125cc4.jpg

瀏覽器操作(7)

  1. 滾動(dòng)到頁面底部
export const scrollToTop = () => {
  const height = document.documentElement.scrollTop || document.body.scrollTop;
  if (height > 0) {
    window.requestAnimationFrame(scrollToTop);
    window.scrollTo(0, height - height / 8);
  }
}
  1. 滾動(dòng)到頁面底部
export const scrollToBottom = () => {
  window.scrollTo(0, document.documentElement.clientHeight);  
}
  1. 滾動(dòng)到指定區(qū)域
export const smoothScroll = (element) => {
    document.querySelector(element).scrollIntoView({
        behavior: 'smooth'
    });
};
  1. 獲取可視窗口高度
export const getClientHeight = () => {
    let clientHeight = 0;
    if (document.body.clientHeight && document.documentElement.clientHeight) {
        clientHeight = (document.body.clientHeight < document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;
    }
    else {
        clientHeight = (document.body.clientHeight > document.documentElement.clientHeight) ? document.body.clientHeight : document.documentElement.clientHeight;
    }
    return clientHeight;
}
  1. 獲取可視窗口寬度
export const getPageViewWidth = () => {
    return (document.compatMode == "BackCompat" ? document.body : document.documentElement).clientWidth;
}
  1. 打開瀏覽器全屏
export const toFullScreen = () => {
    let element = document.body;
    if (element.requestFullscreen) {
      element.requestFullscreen()
    } else if (element.mozRequestFullScreen) {
      element.mozRequestFullScreen()
    } else if (element.msRequestFullscreen) {
      element.msRequestFullscreen()
    } else if (element.webkitRequestFullscreen) {
      element.webkitRequestFullScreen()
    }
}
  1. 退出瀏覽器全屏
export const exitFullscreen = () => {
    if (document.exitFullscreen) {
      document.exitFullscreen()
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen()
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen()
    } else if (document.webkitExitFullscreen) {
      document.webkitExitFullscreen()
    }
}

設(shè)備判斷(6)

  1. 判斷是移動(dòng)還是pc設(shè)備
export const isMobile = () => {
  if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|Symbian|Windows Phone|Phone)/i))) {
        return 'mobile';
  }
  return 'desktop';
}
  1. 判斷是否是蘋果還是安卓移動(dòng)設(shè)備
export const isAppleMobileDevice = () => {
  let reg = /iphone|ipod|ipad|Macintosh/i;
  return reg.test(navigator.userAgent.toLowerCase());
}
  1. 判斷是否是安卓 移動(dòng)設(shè)備
export const isAndroidMobileDevice = () => {
  return /android/i.test(navigator.userAgent.toLowerCase());
}
  1. 判斷是windows系統(tǒng)還是mac系統(tǒng)
export const osType = () => {
    const agent = navigator.userAgent.toLowerCase();
    const isMac = /macintosh|mac os x/i.test(navigator.userAgent);
    const isWindows = agent.indexOf("win64") >= 0 || agent.indexOf("wow64") >= 0 || agent.indexOf("win32") >= 0 || agent.indexOf("wow32") >= 0;
    if (isWindows) {
        return "windows";
    }
    if(isMac){
        return "mac";
    }
}
  1. 判斷是否是微信/qq內(nèi)置瀏覽器
export const broswer = () => {
    const ua = navigator.userAgent.toLowerCase();
    if (ua.match(/MicroMessenger/i) == "micromessenger") {
        return "weixin";
    } else if (ua.match(/QQ/i) == "qq") {
        return "QQ";
    }
    return false;
}
  1. 瀏覽器型號(hào)和版本
export const getExplorerInfo = () => {
    let t = navigator.userAgent.toLowerCase();
    return 0 <= t.indexOf("msie") ? { //ie < 11
        type: "IE",
        version: Number(t.match(/msie ([\d]+)/)[1])
    } : !!t.match(/trident\/.+?rv:(([\d.]+))/) ? { // ie 11
        type: "IE",
        version: 11
    } : 0 <= t.indexOf("edge") ? {
        type: "Edge",
        version: Number(t.match(/edge\/([\d]+)/)[1])
    } : 0 <= t.indexOf("firefox") ? {
        type: "Firefox",
        version: Number(t.match(/firefox\/([\d]+)/)[1])
    } : 0 <= t.indexOf("chrome") ? {
        type: "Chrome",
        version: Number(t.match(/chrome\/([\d]+)/)[1])
    } : 0 <= t.indexOf("opera") ? {
        type: "Opera",
        version: Number(t.match(/opera.([\d]+)/)[1])
    } : 0 <= t.indexOf("Safari") ? {
        type: "Safari",
        version: Number(t.match(/version\/([\d]+)/)[1])
    } : {
        type: t,
        version: -1
    }
}

操作url(5)

  1. 獲取url參數(shù)列表
export const GetRequest = () => {
    let url = location.search;
    const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 將 ? 后面的字符串取出來
    const paramsArr = paramsStr.split('&'); // 將字符串以 & 分割后存到數(shù)組中
    let paramsObj = {};
    // 將 params 存到對(duì)象中
    paramsArr.forEach(param => {
      if (/=/.test(param)) { // 處理有 value 的參數(shù)
        let [key, val] = param.split('='); // 分割 key 和 value
        val = decodeURIComponent(val); // 解碼
        val = /^\d+$/.test(val) ? parseFloat(val) : val; // 判斷是否轉(zhuǎn)為數(shù)字
        if (paramsObj.hasOwnProperty(key)) { // 如果對(duì)象有 key贺拣,則添加一個(gè)值
          paramsObj[key] = [].concat(paramsObj[key], val);
        } else { // 如果對(duì)象沒有這個(gè) key蓖谢,創(chuàng)建 key 并設(shè)置值
          paramsObj[key] = val;
        }
      } else { // 處理沒有 value 的參數(shù)
        paramsObj[param] = true;
      }
    })
    return paramsObj;
};
  1. 檢測url是否有效
export const getUrlState = (URL) => {
  let xmlhttp = new ActiveXObject("microsoft.xmlhttp");
  xmlhttp.Open("GET", URL, false);
  try {
    xmlhttp.Send();
  } catch (e) {
  } finally {
    let result = xmlhttp.responseText;
    if (result) {
      if (xmlhttp.Status == 200) {
        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }
  }
}
  1. 鍵值對(duì)拼接成url參數(shù)
export const params2Url = (obj) => {
     let params = []
     for (let key in obj) {
       params.push(`${key}=${obj[key]}`);
     }
     return encodeURIComponent(params.join('&'))
}
  1. 修改url中的參數(shù)
export const replaceParamVal => (paramName, replaceWith) {
   const oUrl = location.href.toString();
   const re = eval('/('+ paramName+'=)([^&]*)/gi');
   location.href = oUrl.replace(re,paramName+'='+replaceWith);
   return location.href;
}
  1. 刪除url中指定參數(shù)
export const funcUrlDel = (name) => {
  const baseUrl = location.origin + location.pathname + "?";
  const query = location.search.substr(1);
  if (query.indexOf(name) > -1) {
    const obj = {};
    const arr = query.split("&");
    for (let i = 0; i < arr.length; i++) {
      arr[i] = arr[i].split("=");
      obj[arr[i][0]] = arr[i][1];
    }
    delete obj[name];
    return baseUrl + JSON.stringify(obj).replace(/[\"\{\}]/g,"").replace(/\:/g,"=").replace(/\,/g,"&");
  }
}

格式校驗(yàn)(7)

  1. 檢驗(yàn)身份證號(hào)碼
export const checkCardNo = (value) => {
    let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    return reg.test(value);
};
  1. 校驗(yàn)是否包含中文
export const haveCNChars => (value) => {
    return /[\u4e00-\u9fa5]/.test(value);
}
  1. 校驗(yàn)是否為中國大陸的郵政編碼
export const isPostCode = (value) => {
    return /^[1-9][0-9]{5}$/.test(value.toString());
}
  1. 校驗(yàn)是否為 ipv6地址
export const isIPv6 = (str) => {
    return Boolean(str.match(/:/g)?str.match(/:/g).length<=7:false && /::/.test(str)?/^([\da-f]{1,4}(:|::)){1,6}[\da-f]{1,4}$/i.test(str):/^([\da-f]{1,4}:){7}[\da-f]{1,4}$/i.test(str));
}
  1. 校驗(yàn)是否為郵箱地址
export const isEmail = (value) {
    return /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value);
}
  1. 校驗(yàn)是否為中國大陸手機(jī)號(hào)
export const isTel = (value) => {
    return /^1[3,4,5,6,7,8,9][0-9]{9}$/.test(value.toString());
}
  1. 校驗(yàn)是否包含emoji表情
export const isEmojiCharacter = (value) => {
    value = String(value);
    for (let i = 0; i < value.length; i++) {
        const hs = value.charCodeAt(i);
        if (0xd800 <= hs && hs <= 0xdbff) {
            if (value.length > 1) {
                const ls = value.charCodeAt(i + 1);
                const uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
                if (0x1d000 <= uc && uc <= 0x1f77f) {
                    return true;
                }
            }
        } else if (value.length > 1) {
            const ls = value.charCodeAt(i + 1);
            if (ls == 0x20e3) {
                return true;
            }
        } else {
            if (0x2100 <= hs && hs <= 0x27ff) {
                return true;
            } else if (0x2B05 <= hs && hs <= 0x2b07) {
                return true;
            } else if (0x2934 <= hs && hs <= 0x2935) {
                return true;
            } else if (0x3297 <= hs && hs <= 0x3299) {
                return true;
            } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030
                    || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b
                    || hs == 0x2b50) {
                return true;
            }
        }
    }
    return false;
}

數(shù)字操作(2)

  1. 生成指定范圍隨機(jī)數(shù)
export const randomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
  1. 數(shù)字千分位分隔
export const format = (n) => {
    let num = n.toString();
    let len = num.length;
    if (len <= 3) {
        return num;
    } else {
        let temp = '';
        let remainder = len % 3;
        if (remainder > 0) { // 不是3的整數(shù)倍
            return num.slice(0, remainder) + ',' + num.slice(remainder, len).match(/\d{3}/g).join(',') + temp;
        } else { // 3的整數(shù)倍
            return num.slice(0, len).match(/\d{3}/g).join(',') + temp; 
        }
    }
}

操作cookie

  1. 設(shè)置cookie
export const setCookie = (key, value, expire) => {
    const d = new Date();
    d.setDate(d.getDate() + expire);
    document.cookie = `${key}=${value};expires=${d.toUTCString()}`
};
  1. 讀取cookie
export const getCookie = (key) => {
    const cookieStr = unescape(document.cookie);
       const arr = cookieStr.split('; ');
       let cookieValue = '';
       for (let i = 0; i < arr.length; i++) {
           const temp = arr[i].split('=');
           if (temp[0] === key) {
               cookieValue = temp[1];
               break
       }
    }
    return cookieValue
};
  1. 刪除cookie
export const delCookie = (key) => {
    document.cookie = `${encodeURIComponent(key)}=;expires=${new Date()}`
};

操作存儲(chǔ)(6)

  1. 存儲(chǔ)localstorage
export const loalStorageSet = (key, value) => {
    if (!key) return;
    if (typeof value !== 'string') {
        value = JSON.stringify(value);
    }
    window.localStorage.setItem(key, value);
};
  1. 獲取localstorage
export const loalStorageGet = (key) => {
    if (!key) return;
    return window.localStorage.getItem(key);
};
  1. 刪除localstorage
export const loalStorageRemove = (key) => {
    if (!key) return;
    window.localStorage.removeItem(key);
};
  1. 存儲(chǔ)sessionstorage
export const sessionStorageSet = (key, value) => {
    if (!key) return;
    if (typeof value !== 'string') {
            value = JSON.stringify(value);
    }
    window.sessionStorage.setItem(key, value)
};
  1. 獲取sessionstorage
export const sessionStorageGet = (key) => {
    if (!key) return;
    return window.sessionStorage.getItem(key)
};
  1. 刪除sessionstorage
export const sessionStorageRemove = (key) => {
    if (!key) return;
    window.sessionStorage.removeItem(key)
};

格式轉(zhuǎn)化(2)

  1. 數(shù)字轉(zhuǎn)化為大寫金額
export const digitUppercase = (n) => {
    const fraction = ['角', '分'];
    const digit = [
        '零', '壹', '貳', '叁', '肆',
        '伍', '陸', '柒', '捌', '玖'
    ];
    const unit = [
        ['元', '萬', '億'],
        ['', '拾', '佰', '仟']
    ];
    n = Math.abs(n);
    let s = '';
    for (let i = 0; i < fraction.length; i++) {
        s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
    }
    s = s || '整';
    n = Math.floor(n);
    for (let i = 0; i < unit[0].length && n > 0; i++) {
        let p = '';
        for (let j = 0; j < unit[1].length && n > 0; j++) {
            p = digit[n % 10] + unit[1][j] + p;
            n = Math.floor(n / 10);
        }
        s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
    }
    return s.replace(/(零.)*零元/, '元')
        .replace(/(零.)+/g, '零')
        .replace(/^整$/, '零元整');
};
  1. 數(shù)字轉(zhuǎn)化為中文數(shù)字
export const intToChinese = (value) => {
 const str = String(value);
 const len = str.length-1;
 const idxs = ['','十','百','千','萬','十','百','千','億','十','百','千','萬','十','百','千','億'];
 const num = ['零','一','二','三','四','五','六','七','八','九'];
 return str.replace(/([1-9]|0+)/g, ( $, $1, idx, full) => {
    let pos = 0;
    if($1[0] !== '0'){
      pos = len-idx;
      if(idx == 0 && $1[0] == 1 && idxs[len-idx] == '十'){
         return idxs[len-idx];
      }
        return num[$1[0]] + idxs[len-idx];
    } else {
        let left = len - idx;
        let right = len - idx + $1.length;
        if(Math.floor(right / 4) - Math.floor(left / 4) > 0){
            pos = left - left % 4;
        }
        if( pos ){
            return idxs[pos] + num[$1[0]];
        } else if( idx + $1.length >= len ){
            return '';
        }else {
            return num[$1[0]]
        }
    }
   });
}

字符串操作(7)

  1. 生成隨機(jī)字符串
export const randomString = (len) => {
    let chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz123456789';
    let strLen = chars.length;
    let randomStr = '';
    for (let i = 0; i < len; i++) {
        randomStr += chars.charAt(Math.floor(Math.random() * strLen));
    }
    return randomStr;
};
  1. 字符串首字母大寫
export const fistLetterUpper = (str) => {
    return str.charAt(0).toUpperCase() + str.slice(1);
};
  1. 手機(jī)號(hào)中間四位變成*
export const telFormat = (tel) => {
    tel = String(tel); 
    return tel.substr(0,3) + "****" + tel.substr(7);
};
  1. 駝峰命名轉(zhuǎn)為成短橫線命名
export const getKebabCase = (str) => {
    return str.replace(/[A-Z]/g, (item) => '-' + item.toLowerCase())
}
  1. 短橫線命名轉(zhuǎn)換為駝峰命名
export const getCamelCase = (str) => {
    return str.replace( /-([a-z])/g, (i, item) => item.toUpperCase())
}
  1. 全角轉(zhuǎn)為半角
 export const toCDB = (str) => {
  let result = "";
  for (let i = 0; i < str.length; i++) {
    code = str.charCodeAt(i);
    if (code >= 65281 && code <= 65374) {
      result += String.fromCharCode(str.charCodeAt(i) - 65248);
    } else if (code == 12288) {
      result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);
    } else {
      result += str.charAt(i);
    }
  }
  return result;
}
  1. 半角轉(zhuǎn)為全角
export const toDBC = (str) => {
  let result = "";
  for (let i = 0; i < str.length; i++) {
    code = str.charCodeAt(i);
    if (code >= 33 && code <= 126) {
      result += String.fromCharCode(str.charCodeAt(i) + 65248);
    } else if (code == 32) {
      result += String.fromCharCode(str.charCodeAt(i) + 12288 - 32);
    } else {
      result += str.charAt(i);
    }
  }
  return result;
}

時(shí)間操作(2)

  1. 當(dāng)前時(shí)間
export const nowTime = () => {
    const now = new Date();
    const year = now.getFullYear();
    const month = now.getMonth();
    const date = now.getDate() >= 10 ? now.getDate() : ('0' + now.getDate());
    const hour = now.getHours() >= 10 ? now.getHours() : ('0' + now.getHours());
    const miu = now.getMinutes() >= 10 ? now.getMinutes() : ('0' + now.getMinutes());
    const sec = now.getSeconds() >= 10 ? now.getSeconds() : ('0' + now.getSeconds());
    return +year + "年" + (month + 1) + "月" + date + "日 " + hour + ":" + miu + ":" + sec;
}
  1. 格式化時(shí)間
export const dateFormater = (formater, time) => {
    let date = time ? new Date(time) : new Date(),
        Y = date.getFullYear() + '',
        M = date.getMonth() + 1,
        D = date.getDate(),
        H = date.getHours(),
        m = date.getMinutes(),
        s = date.getSeconds();
    return formater.replace(/YYYY|yyyy/g, Y)
        .replace(/YY|yy/g, Y.substr(2, 2))
        .replace(/MM/g,(M<10 ? '0' : '') + M)
        .replace(/DD/g,(D<10 ? '0' : '') + D)
        .replace(/HH|hh/g,(H<10 ? '0' : '') + H)
        .replace(/mm/g,(m<10 ? '0' : '') + m)
        .replace(/ss/g,(s<10 ? '0' : '') + s)
}
// dateFormater('YYYY-MM-DD HH:mm:ss')
// dateFormater('YYYYMMDDHHmmss')

javascript操作(5)

  1. 阻止冒泡事件
export const stopPropagation = (e) => { 
    e = e || window.event; 
    if(e.stopPropagation) {    // W3C阻止冒泡方法 
        e.stopPropagation(); 
    } else { 
        e.cancelBubble = true; // IE阻止冒泡方法 
    } 
} 
  1. 防抖函數(shù)
export const debounce = (fn, wait) => {
  let timer = null;

  return function() {
    let context = this,
        args = arguments;

    if (timer) {
      clearTimeout(timer);
      timer = null;
    }

    timer = setTimeout(() => {
      fn.apply(context, args);
    }, wait);
  };
}
  1. 節(jié)流函數(shù)
export const throttle = (fn, delay) => {
  let curTime = Date.now();

  return function() {
    let context = this,
        args = arguments,
        nowTime = Date.now();

    if (nowTime - curTime >= delay) {
      curTime = Date.now();
      return fn.apply(context, args);
    }
  };
}
  1. 數(shù)據(jù)類型判斷
export const getType = (value) => {
  if (value === null) {
    return value + "";
  }
  // 判斷數(shù)據(jù)是引用類型的情況
  if (typeof value === "object") {
    let valueClass = Object.prototype.toString.call(value),
      type = valueClass.split(" ")[1].split("");
    type.pop();
    return type.join("").toLowerCase();
  } else {
    // 判斷數(shù)據(jù)是基本數(shù)據(jù)類型的情況和函數(shù)的情況
    return typeof value;
  }
}
  1. 對(duì)象深拷貝
export const deepClone = (obj, hash = new WeakMap()) => {
  // 日期對(duì)象直接返回一個(gè)新的日期對(duì)象
  if (obj instanceof Date){
    return new Date(obj);
  } 
  //正則對(duì)象直接返回一個(gè)新的正則對(duì)象     
  if (obj instanceof RegExp){
    return new RegExp(obj);     
  }
  //如果循環(huán)引用,就用 weakMap 來解決
  if (hash.has(obj)){
    return hash.get(obj);
  }
  // 獲取對(duì)象所有自身屬性的描述
  let allDesc = Object.getOwnPropertyDescriptors(obj);
  // 遍歷傳入?yún)?shù)所有鍵的特性
  let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc)
  
  hash.set(obj, cloneObj)
  for (let key of Reflect.ownKeys(obj)) { 
    if(typeof obj[key] === 'object' && obj[key] !== null){
        cloneObj[key] = deepClone(obj[key], hash);
    } else {
        cloneObj[key] = obj[key];
    }
  }
  return cloneObj
}

數(shù)組操作(3)

  1. 數(shù)組亂序
export const arrScrambling = (arr) => {
    for (let i = 0; i < arr.length; i++) {
      const randomIndex = Math.round(Math.random() * (arr.length - 1 - i)) + i;
      [arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]];
    }
    return arr;
}
  1. 數(shù)組扁平化
export const arrScrambling = (arr) => {
    for (let i = 0; i < arr.length; i++) {
      const randomIndex = Math.round(Math.random() * (arr.length - 1 - i)) + i;
      [arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]];
    }
    return arr;
}
  1. 數(shù)組中獲取隨機(jī)數(shù)
export const sample = arr => arr[Math.floor(Math.random() * arr.length)];

作者:CUGGZ,原文地址請(qǐng)點(diǎn)擊此處

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末譬涡,一起剝皮案震驚了整個(gè)濱河市闪幽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涡匀,老刑警劉巖盯腌,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異陨瘩,居然都是意外死亡腕够,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門舌劳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帚湘,“玉大人,你說我怎么就攤上這事甚淡〈笾睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵材诽,是天一觀的道長底挫。 經(jī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
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼妄帘!你這毒婦竟也來了楞黄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤抡驼,失蹤者是張志新(化名)和其女友劉穎谅辣,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婶恼,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桑阶,尸身上長有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
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贯底。三九已至,卻和暖如春撒强,著一層夾襖步出監(jiān)牢的瞬間禽捆,已是汗流浹背笙什。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睦擂,地道東北人得湘。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像顿仇,于是被迫代替她去往敵國和親淘正。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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