前端学习笔记vue-01(仿照网易严选)

vue版网易严选体验网易严选购物流程 vue版网易严选,体验网易严选购物流程 立即下载

仿照网易严选

安装vue-cli
cnpm intall vue-cli -g

项目初始化

vue init webpack “vue-wangyi”

使用vant
https://youzan.github.io/vant/#/zh-CN/button

通过 npm 安装
npm i vant -S

// 在.babelrc 中添加配置
// 注意:webpack 1 无需设置 libraryDirectory
{
“plugins”: [
[“import”, {
“libraryName”: “vant”,
“libraryDirectory”: “es”,
“style”: true
}]
]
}

在这里插入图片描述

在main.js全局引入

import { Button } from ‘vant’
Vue.use(Button)

网易严选适配js

; (function(win, lib) {
    var doc = win.document;
    var docEl = doc.documentElement;
    var metaEl = doc.querySelector('meta[name="viewport"]');
    var flexibleEl = doc.querySelector('meta[name="flexible"]');
    var dpr = 0;
    var scale = 0;
    var tid;
    var flexible = lib.flexible || (lib.flexible = {});
    if (metaEl) {
        console.warn("将根据已有的meta标签来设置缩放比例");
        var match = metaEl.getAttribute("content").match(/initial\-scale=([\d\.]+)/);
        if (match) {
            scale = parseFloat(match[1]);
            dpr = parseInt(1 / scale)
        }
    } else {
        if (flexibleEl) {
            var content = flexibleEl.getAttribute("content");
            if (content) {
                var initialDpr = content.match(/initial\-dpr=([\d\.]+)/);
                var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);
                if (initialDpr) {
                    dpr = parseFloat(initialDpr[1]);
                    scale = parseFloat((1 / dpr).toFixed(2))
                }
                if (maximumDpr) {
                    dpr = parseFloat(maximumDpr[1]);
                    scale = parseFloat((1 / dpr).toFixed(2))
                }
            }
        }
    }
    if (!dpr && !scale) {
        var isAndroid = win.navigator.appVersion.match(/android/gi);
        var isIPhone = win.navigator.appVersion.match(/iphone/gi);
        var devicePixelRatio = win.devicePixelRatio;
        if (isIPhone) {
            if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {
                dpr = 3
            } else {
                if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)) {
                    dpr = 2
                } else {
                    dpr = 1
                }
            }
        } else {
            dpr = 1
        }
        scale = 1 / dpr
    }
    docEl.setAttribute("data-dpr", dpr);
    if (!metaEl) {
        metaEl = doc.createElement("meta");
        metaEl.setAttribute("name", "viewport");
        if ( !! win.webPageScalable) {
            metaEl.setAttribute("content", "initial-scale=" + scale + ", user-scalable=yes")
        } else {
            metaEl.setAttribute("content", "initial-scale=" + scale + ", maximum-scale=" + scale + ", minimum-scale=" + scale + ", user-scalable=no viewport-fit=cover")
        }
        if (docEl.firstElementChild) {
            docEl.firstElementChild.appendChild(metaEl)
        } else {
            var wrap = doc.createElement("div");
            wrap.appendChild(metaEl);
            doc.write(wrap.innerHTML)
        }
    }
    function refreshRem() {
        var width = docEl.getBoundingClientRect().width;
        var ua = navigator.userAgent.toLowerCase();
        if (!/ipad.*yanxuan/.test(ua)) {
            if (width / dpr > 750) {
                width = 750 * dpr
            }
        }
        var rem = width / 10;
        docEl.style.fontSize = rem + "px";
        flexible.rem = win.rem = rem
    }
    win.addEventListener("resize",
    function() {
        clearTimeout(tid);
        tid = setTimeout(refreshRem, 300)
    },
    false);
    win.addEventListener("pageshow",
    function(e) {
        if (e.persisted) {
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 300)
        }
    },
    false);
    if (doc.readyState === "complete") {
        doc.body.style.fontSize = 12 * dpr + "px"
    } else {
        doc.addEventListener("DOMContentLoaded",
        function(e) {
            doc.body.style.fontSize = 12 * dpr + "px"
        },
        false)
    }
    refreshRem();
    flexible.dpr = win.dpr = dpr;
    flexible.refreshRem = refreshRem;
    flexible.rem2px = function(d) {
        var val = parseFloat(d) * this.rem;
        if (typeof d === "string" && d.match(/rem$/)) {
            val += "px"
        }
        return val
    };
    flexible.px2rem = function(d) {
        var val = parseFloat(d) / this.rem;
        if (typeof d === "string" && d.match(/px$/)) {
            val += "rem"
        }
        return val
    }
})(window, window["lib"] || (window["lib"] = {}));

写个html网易严选js的移动端适配

test.html

打印下win对象

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<script type="text/javascript">
; (function(win, lib) {
    console.log(win);
})(window, window["lib"] || (window["lib"] = {}));
</script>
<div>
    <h1>老阿木的移动端适配方案的简单使用</h1>
</div>

在这里插入图片描述

一步一步调式和打印网易严选js的功能

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<script type="text/javascript">
; (function(win, lib) {
    var doc = win.document;
    var docEl = doc.documentElement;
    var metaEl = doc.querySelector('meta[name="viewport"]');
    console.log(metaEl);
})(window, window["lib"] || (window["lib"] = {}));
</script>
<div>
    <h1>老阿木的移动端适配方案的简单使用</h1>
</div>

适配rem

rem是CSS3新增的相对长度单位,是指相对于根元素html的font-size计算值的大小。简单可理解为屏幕宽度的百分比。

与em相同的是它们都是使用元素设定字体大小,不同的是em是根据父级元素设置大小。而rem在根据指定html根元素的字符大小而定的,从IE6到Chrome中,默认根元素的font-size都是16px的。如果想要设置12px的

简单rem适配实现

<html >
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    
<style type="text/css"> 
    .h1{
        font-size: 16px;
        font-weight: normal;
    }
    .imgclass{
        width: 30 rem;
        display: block;
    }
</style>
<script type="text/javascript">
//得到屏幕的宽度
    var win=document.documentElement.clientWidth;
    console.log(win);
    //得到html元素
    var _html=document.getElementsByTagName('html')[0]
    console.log(_html);
    //设置根元素字体的大小
    _html.style.fontSize=win/20 +'px'

</script>
<div>
    <h1>我的移动端适配方案的思路简单讲解</h1>
    <img class="imgclass" src="aa.png" alt="">
</div>
</html>

引入rem.js到vue工程项目中

;(function (designWidth, maxWidth) {
    var doc = document,
        win = window;
    var docEl = doc.documentElement;
    var tid;
    var rootItem, rootStyle;

    function refreshRem() {
        var width = docEl.getBoundingClientRect().width;
        if (!maxWidth) {
            maxWidth = 540;
        }
        ;
        if (width > maxWidth) {
            width = maxWidth;
        }
        //与淘宝做法不同,直接采用简单的rem换算方法1rem=100px
        var rem = width * 100 / designWidth;
        //兼容UC开始
        rootStyle = "html{font-size:" + rem + 'px !important}';
        rootItem = document.getElementById('rootsize') || document.createElement("style");
        if (!document.getElementById('rootsize')) {
            document.getElementsByTagName("head")[0].appendChild(rootItem);
            rootItem.id = 'rootsize';
        }
        if (rootItem.styleSheet) {
            rootItem.styleSheet.disabled || (rootItem.styleSheet.cssText = rootStyle)
        } else {
            try {
                rootItem.innerHTML = rootStyle
            } catch (f) {
                rootItem.innerText = rootStyle
            }
        }
        //兼容UC结束
        docEl.style.fontSize = rem + "px";
    };
    refreshRem();

    win.addEventListener("resize", function () {
        clearTimeout(tid); //防止执行两次
        tid = setT imeout(refreshRem, 300);
    }, false);

    win.addEventListener("pageshow", function (e) {
        if (e.persisted) { // 浏览器后退的时候重新计算
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 300);
        }
    }, false);

    if (doc.readyState === "complete") {
        doc.body.style.fontSize = "16px";
    } else {
        doc.addEventListener("DOMContentLoaded", function (e) {
            doc.body.style.fontSize = "16px";
        }, false);
    }
})(375, 750);

在main.js全局引入

import ‘./assets/rem’

设置reset.css,重置样式

/* 
html5doctor.com Reset Stylesheet
v1.4.1 
2010-03-01
Author: Richard Clark - http://richclarkdesign.com
*/
html, body, div, span, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
abbr, address, cite, code,
del, dfn, em, img, ins, kbd, q, samp,
small, strong, sub, sup, var,
b, i,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section, summary,
time, mark, audio, video {
    margin:0;
    padding:0;
    border:0;
    outline:0;
    font-size:100%;
    vertical-align:baseline;
    background:transparent;
    box-sizing:border-box;
}
body {
    line-height:1;
}

:focus {
    outline: 1;
}

article,aside,canvas,details,figcaption,figure,
footer,header,hgroup,menu,nav,section,summary { 
    display:block;
}

ul {
    list-style:none;
}

blockquote, q {
    quotes:none;
}

blockquote:before, blockquote:after,
q:before, q:after {
    content:'';
    content:none;
}

a {
    margin:0;
    padding:0;
    border:0;
    font-size:100%;
    vertical-align:baseline;
    background:transparent;
}

ins {
    background-color:#ff9;
    color:#000;
    text-decoration:none;
}

mark {
    background-color:#ff9;
    color:#000; 
    font-style:italic;
    font-weight:bold;
}

del {
    text-decoration: line-through;
}

abbr[title], dfn[title] {
    border-bottom:1px dotted #000;
    cursor:help;
}

table {
    border-collapse:collapse;
    border-spacing:0;
}

hr {
    display:block;
    height:1px;
    border:0;   
    border-top:1px solid #cccccc;
    margin:1em 0;
    padding:0;
}

input, select {
    vertical-align:middle;
}

删除helloword.vue的原始信息

开始开发页面

网易严选移动端meta适配方案.js 网易严选移动端meta适配方案,浏览器窗口改变字体等跟着变动 网易严选移动端meta适配方案,浏览器窗口改变字体等跟着变动 网易严选移动端meta适配方案,浏览器窗口改变字体等跟着变动 立即下载

相关推荐

mpvue仿网易严选小程序服务端

mpvue仿网易严选小程序服务端

Vue3项目 网易严选_学习笔记

Vue3项目 网易严选_第一天 主要内容 项目搭建 vuex基础 路由设计 首页顶部和底部布局 学习目标 知识点 要求 项目搭建 掌握 vuex基础 掌握 路由设计 掌握 首页顶部和底部布局 掌握 一、项目搭建 1.1 创建项目 vue create vue-wangyi 选择vue3.0版本 1.2 目录调整 大致步骤: 删除无用代码和文件 完善项目的基础结构 读懂默认生成的代码 注意:以上结构目录及供参考 二、Vuex基础 安装: npm install v

水滴的专栏 1503

vue电商项目(仿网易严选),内含简易的购物车功能

简易的一个vue电商项目,仿的是网易严选,内含简易的购物车功能,该资源仅供学习参考

vue+vant移动端入门实现5(仿网易严选)

1.吸顶--粘性布局sticky 2.Tabber 标签栏,页面跳转 3.footer 标签栏--抽取为单独文件 4.实现fo'o

MCCLS的博客 1274

网易严选小程序亲测版

亲测版,可以安装使用,如用问题加联系。

高仿网易严选商城

服务端api基于Node.js+ThinkJS+MySQL 基于Vue.js的后台管理系统、PC版、Wap版

网易严选小程序学习笔记 2

node.js后端 控制层controllers 代码 mpvue-shop-node/controllers/index.js const _ = require('lodash') const fs = require('fs') const path = require('path') // 映射 d 文件夹下的文件为模块 const mapDir = d => { const tree = {} // 获取当前文件夹下的所有文件夹和文件,分成两组,文件夹一组,文件一组 c

理综卷前端自习室 249

在 Kubernetes 上部署 Label Studio

Label Studio 是一款开源的数据标注工具,支持多种标注任务,如文本标注、图像标注、音频标注等。

啥都会一点 668

Vue 引入Ueditor修改样式仿照Word文档

Vue 引入Ueditor修改样式仿照Word文档前言Vue 引入Ueditor仿照word文档进行样式修改合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 项目中有涉及到对文本生成和文本内容编辑的需求,选择了百度的Ueditor。项目

xiaoqingqing的博客 2353

告别误唤醒!S32K3xx低功耗设计避坑指南:Fast Standby模式与WISR寄存器操作详解

本文深入解析了NXP S32K3xx系列MCU在低功耗设计中常见的误唤醒问题,并提供了基于Fast Standby模式的解决方案。文章重点剖析了DCMRWF5寄存器的配置方法、WISR/WISR_64唤醒中断状态寄存器的标志位处理策略,以及如何利用32KB Standby SRAM保存唤醒状态,从而帮助开发者构建稳定可靠的汽车电子低功耗系统。

weixin_29163857的博客 361

智能车八邻域图像算法

智能车八邻域图像算法

技术缝合怪的博客 4万+

BetterFE 前端技术周刊 - 2019/01/21

## 深阅读 如何在github快速找到你想要的开源项目 推荐理由:坊间有句笑话:在新浪网易上按Ctrl-C叫编辑,在stackoverflow上按就叫程序员。这虽然是句调侃,也说明了 1.会Ctrl-C/V不值钱,知道从哪copy,应该paste到哪才值钱 2.现如今大部分项目不需要那么多原创代码,只需要我们在合适的地方按需索取。这就不得不提另一个程序员宝库了,github,但大多数程序员在gi...

weixin_34007879的博客 236

基于sklearn实现LDA主题模型(附实战案例)

目录LDA主题模型1.LDA主题模型原理2.LDA主题模型推演过程3.sklearn实现LDA主题模型(实战)3.1数据集介绍3.2导入数据3.3分词处理 3.4文本向量化3.5构建LDA模型3.6LDA模型可视化 3.7困惑度 其实说到LDA能想到的有两个含义,一种是线性判别分析(Linear Discriminant Analysis),一种说的是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。 现在讨论的是主题模型

m0_64336780的博客 2万+

盘点 12 个 GitHub 上的高仿项目

老逛整理了现在比较热门 App 的高仿项目,这些项目都是有「recently updated」,而不是年代久远不再维护的项目。包括高仿微信、微博、B站、斗鱼、抖音、美团、头条、掘金等等。...

公众号:逛逛GitHub 1万+

【Coppeliasim|轨迹规划(三)】机械臂逆解

文章目录一些设置导航点设置添加连接用于碰撞的设置代码实现终端输出 一些设置 导航点设置 关于如何添加设置 dummy 的细节建议参考官方手册,这里不再赘述。 添加连接用于碰撞的设置 按照序号点击(一个是机械臂,一个是所有的物体除了机械臂): 代码实现 getMatrixShiftedAlongZ=function(matrix,localZShift) local m={} for i=1,12,1 do m[i]=matrix[i] end

【人工智障 | 计算鸡视觉 | 机器孩】 1万+

手把手教你完成YOLOv8 PyQt5和PySide6目标检测界面搭建,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

目标检测是计算机视觉中的重要任务,广泛应用于安防监控、自动驾驶、智能家居等领域。YOLO系列模型由于其高效的检测速度和较高的准确率,成为目标检测任务的首选算法之一。本项目结合 YOLOv8 与 PyQt5,构建了一个图形化界面,便于用户进行目标检测的操作和展示,实现对图片、视频和摄像头的实时目标检测,不仅可以用于大论文的工作量展示,还可以作为毕业设计。支持目标检测、目标分割等模型进来检测

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1万+

热门App 高仿项目12 个 GitHub 上的高仿项目

热门App 高仿项目12 个 GitHub 上的高仿项目

weixin_46146313的博客 1万+

【GitHub项目推荐--GitHub 上的高仿项目】【转载】

整理了现在比较热门 App 的高仿项目,这些项目都是有「recently updated」,而不是年代久远不再维护的项目。包括高仿微信、微博、B站、斗鱼、抖音、美团、头条、掘金等等。这些项目涉及的技术栈有 Vue、Flutter 等等,看这些高仿项目的源码有什么用呢?比如下面这个高仿知乎,采用 Flutter 技术栈,把代码 Download 下来,看着代码做一遍基本可以入门 Flutter,学会 APP 布局。使用 Flutter 模仿的知乎黑色主题的 UI,在 我的 页中可以修改日间和夜间模式。

j8267643的博客 1192

【XSRP软件无线电】基于软件无线电平台的QPSK频带通信系统设计(含有完整工程资料获取链接)

软件无线电(Software Defined Radio, SDR)是一种无线通信系统,它通过软件来定义和实现无线电的功能,而不是依赖于传统的硬件电路。SDR平台的核心思想是将传统无线电系统中的大部分硬件功能,如调制解调、信号处理、频率选择等,通过软件来实现。这种设计理念使得SDR具有高度的灵活性和可重配置性,能够适应不同的通信标准和频段,快速适应新的通信技术。

嵌入式技术开发 3280

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

上一篇: VSCode - 快速生成vue模版
下一篇: idea的git操作-commit后push前想回退到commit前的状态
沐果果
博客等级 码龄10年 19粉丝 85原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值