common

js

时间戳转换

toLocaleDateString()
new Date().toLocaleDateString()
'2023/10/7'
let today = new Date().toLocaleDateString().replaceAll('/','-')
'2023-10-7'
toLocaleTimeString()
new Date().toLocaleTimeString()
'11:13:02'
toLocaleString / Intl.DateTimeFormat

toLocaleString()是JavaScript中的一个内置方法,用于将日期对象转换为本地化的字符串。
Intl.DateTimeFormat是JavaScript中的一个内置对象,用于格式化日期和时间。

new Date().toLocaleString()
'2023/10/7 11:16:42'
//'zh-CN'表示中文(简体),'en-US'表示英语(美国)
//numeric表示日期和时间的数字部分是完整的数字
//'2-digit'表示日期和时间的数字部分只有一位数时,前面补零
var date = new Date();
cosnt options = { 
		year: 'numeric', 
		month: '2-digit', //'long  输出'2023年9月27日 11:38:30'
		day: '2-digit', 
		hour: '2-digit', 
		minute: '2-digit', 
		second: '2-digit' 
}
//toLocaleString方式实现
var dateStringLocale = date.toLocaleString('zh-CN', options ); // 输出:'2023/09/27 11:16:20'

//Intl.DateTimeFormat方式实现
var formatter = new Intl.DateTimeFormat('zh-CN', options);
var dateStringIntl = formatter.format(date); // 输出:'2023/09/27 11:18:38'


替换不同显示字符


let str = dateString.replaceAll('/','-')
console.log(str);  // 输出:''2023-09-27 11:23:44''

正则

test
var pattern = new RegExp("he", "i");
pattern.test("Hello"); // true

match

"Hello".match("he"); // true 区分大小写
"Hello".match(/he/i); // true 不区分大小写
"Hello".match(new RegExp("he", "i")); // true

播放音频


 https://588ku.com/video_list/36298607.html
import successAudio from "../assets/3C7493C6.mp3";
const media=new Audio(successAudio)

  media.play()

虚拟滚动

vue3实现

注意添加key值 提高渲染效率

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>虚拟滚动(虚拟列表)</title>
    <style>
        .list-wrap {
            position: relative;
            overflow-y: scroll;
            width: 200px;
            margin: 100px auto;
            box-sizing: border-box;
            border: solid 1px;
            background-color: pink;
        }

        .list {
            position: absolute;
            top: 0;
            left: 0;
            list-style: none;
        }

        .list li {
            border: solid 1px;
            line-height: 30px;
            background-color: aqua;
        }
    </style>
</head>

<body>
    <ul id="app">
        <div class="list-wrap" ref="listWrap" @scroll="scrollListener" :style="`height: ${showNum * itemHeight}px;`">
            <!-- 虚拟列表所有项的高度 -->
            <div class="scroll-blank" :style="`height: ${arr.length * itemHeight}px;`"> 
                <!-- 虚拟列表项 -->
                <ul class="list" ref="data">
                    <li v-for="(val,index) in showList" :key="val">
                        {{val}}
                    </li>
                </ul>
            </div>
    </ul>
    <!-- 引Vue -->
    <script src="https://unpkg.com/vue@3.2.27/dist/vue.global.js"></script>
    <script>
        const { createApp, ref, computed, onMounted } = Vue
        const App = {
            setup() {
                let arr = []
                for (let i = 0; i < 50; i++) {
                    arr.push('第' + i + '个')
                }
                const data = ref()
                const itemHeight = ref(30)
                const showNum = ref(15)
                const start = ref(0)



                // 计算可视窗口内要显示的数组 从长数组中截取要展示的头尾
                const showList = computed(() => {

                    return arr.slice(start.value, start.value + showNum.value)
                })

                function scrollListener(event) {
                    const { scrollTop } = event.target

                    // 开始的数组索引  卷去高度 / 每一项高度
                    start.value = Math.floor(scrollTop / itemHeight.value);

               

                    // 动态计算卷去总高度给 虚拟列表一个顶部的偏移量,让数据一直保持在可视窗口中
                    data.value.style.top = scrollTop + 'px';
                }
                return {
                    arr,
                    data,
                    itemHeight,
                    showNum,
                    start,
                    showList,
                    scrollListener
                }
            }
        }
        const app = Vue.createApp(App)
        app.mount('#app')
    </script>
</body>

</html>

react native

屏幕适配

  /**
 * Created by qianxin on 17/6/1.
 * 屏幕工具类
 * ui设计基准,iphone 6
 * width:750
 * height:1334
 */
// 获取屏幕的dp

let screenW = Dimensions.get('window').width;
let screenH = Dimensions.get('window').height;
let fontScale = PixelRatio.getFontScale();
let pixelRatio = PixelRatio.get();
// 高保真的宽度和告诉
const designWidth = 1920;
const designHeight = 1080;

// 根据dp获取屏幕的px
let screenPxW = PixelRatio.getPixelSizeForLayoutSize(screenW);
let screenPxH = PixelRatio.getPixelSizeForLayoutSize(screenH);

/**
 * 设置text
 * @param size  px
 * @returns {Number} dp
 */
global.setSpText= function setSpText(size) {
    var scaleWidth = screenW / designWidth;
    var scaleHeight = screenH / designHeight;
    var scale = Math.min(scaleWidth, scaleHeight);
    size = Math.round(size * scale/fontScale + 0.5);
    return size;
}

/**
 * 设置高度
 * @param size  px
 * @returns {Number} dp
 */
global.scaleSizeH=function (size) {
    var scaleHeight = size * screenPxH / designHeight;
    size = Math.round((scaleHeight / pixelRatio + 0.5));
    return size;
}

/**
 * 设置宽度
 * @param size  px
 * @returns {Number} dp
 */
global.scaleSizeW= function (size) {
    var scaleWidth = size * screenPxW / designWidth;
    size = Math.round((scaleWidth/pixelRatio + 0.5));
    return size;
}

调用摄像头扫码

https://blog.csdn.net/m0_64481687/article/details/130410150

uniapp扫码

	uni.scanCode({
		// scanType:['barCode','qrCode'],
		// 		autoDecodeCharset:true,
	            onlyFromCamera: false,
	            success: function(res) {
	                //去除空格
	                let space_str = '\u0000'
	                let code = res.result.replace(space_str, "")
	                res.result = code
					title.value= res.result
					console.log('条码类型:' + res.scanType);
							console.log('条码内容:' + res.result);
	            },
	            fail() {
	                reject('失败')
	            },
	            complete() {
	                console.log("扫码结束,无论失败还是成功都会回调");
	            }
	        })

热更新

https://code-push.cn/docs/1600.htm

uniapp热更新

// https://www.jb51.net/article/270524.htm

const url ='https://pkg2.zhimg.com/zhihu-dispatch/futureve-app-market(zhihuwap)-release-9.30.1(18818)-armeabi-v7a-bangcle.apk'
			var dtask = plus.downloader.createDownload(url, {
				// filename: "_downloadsapp" //利用保存路径,实现下载文件的重命名
			}, function(d, status) {
				//d为下载的文件对象
				if (status == 200) {
					console.log(d.filename,7777)
					plus.runtime.install(d.filename, {
						// force: true
					}, function() {
						plus.nativeUI.alert("引用资源更新完成!", function() {
							plus.runtime.restart();
						})
					},function(err){
						console.log(err,'err')
					})
					// //下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径
					// var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
					// plus.runtime.openFile(d.filename); //选择软件打开文件
				} else {
					//下载失败
					console.log('下载失败')
					plus.downloader.clear(); //清除下载任务
				}
			})
			console.log('666')
			dtask.addEventListener("statechanged", (task, status) => {
				switch (task.state) {
								case 1:
									console.log('正在下载');
									break;
								case 2:
									console.log('已连接到服务器');
									break;
								case 3:
									const pr = Math.floor(((task.downloadedSize || 0) / (task.totalSize || 0)) * 100);
									console.log(`正在下载 ${pr} %`);
									break;
								case 4:
									plus.nativeUI.closeWaiting();
									break;
							}
			})
			dtask.start()

npm

切换 npm 镜像源

npm config set registry https://registry.npm.taobao.org

npm config get registry

原始的路径

https://registry.npmjs.org/

安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

vsCode插件

nvm

安装和管理多个 node 版本
node版本管理工具下载地址:

https://github.com/coreybutler/nvm-windows/releases

安装前卸载干净电脑上的node。

nvm常用命令:

1、nvm list available 获取所有可以安装的 Node.js 版本
2、nvm install 10.11.0 安装指定版本的 Node.js
3、nvm list 列出所有已经安装的版本
4、nvm use 10.11.0 指定当前要使用的 Node.js 版本,指定使用的 Node.js 版本后,并且配置nodejs当前使用版本的环境变量,nodejs才真正安装了
5、nvm uninstall 10.11.0 卸载某个 Node.js 版本
6、npm install -g cnpm --registry=https://registry.npm.taobao.org 安装cnpm命令

客户端渲染 CRS

在这里插入图片描述
当你在地址栏输入地址的时候
服务器返回一个文件给你
当这个文件运行的时候, 通过执行内部的 js 代码
发送一个 ajax 请求
拿到对应返回的数据
把数据渲染在页面上

服务端渲染

其实就是在服务端把所有的事情做完, 直接把结果给到前端,刚才我们说了, 页面等所有文件其实都是存储在服务器上面的。

当你在地址栏输入地址以后
服务器会找到你需要的 html 文件, 但是先不给你
然后去找到当前这个文件内所需要的数据内容
然后, 把数据内容组装成一个 html 结构插入到页面内
然后把插入好数据的页面直接返回给你
得到的 html 就是完整的最终页面, 直接展示即可

NextJS

Next中文文档

创建项目

npx create-next-app@latest

在这里插入图片描述
在这里插入图片描述
依据 pages 目录结构自动生成路由模块的路由配置。
写到pages文件夹下面可以直接路由访问

运行

npm run dev 运行项目8080端口

部署

npm run build 打包后在。next文件夹
npm run start 在本地启动node300端口访问,部署到服务器用Nginx转发

http://localhost:3000/about

在这里插入图片描述

NuxtJS

NUXT中文文档

创建项目

npx create-nuxt-app <项目名>

在这里插入图片描述
依据 pages 目录结构自动生成 vue-router 模块的路由配置。
写到pages文件夹下面可以直接路由访问

运行

npm run dev 运行项目8080端口

部署

npm run build 打包后在。next文件夹
npm run start 在本地启动node300端口访问,部署到服务器用Nginx转发

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值