admin管理员组

文章数量:1619289

步骤

1. 创建仓库
2. 把仓库 “搬下来”

你想放到哪个文件夹,就在哪右键打开 Git Bash Here

git中搬运语法:git clone 地址
(我通常使用HTTPS的,也可使用SSH的)

3. 搭建相关文件夹结构

(但是有些是用less来写的,写好后less会直接帮忙创建css呀。)

使用的less插件是:VScode中下载 Easy Less插件

4. 分析布局,书写内容和样式

1. 菜单部分

1. 菜单标题部分是固定定位


a标签设置宽高后位置这样是因为,网页的字体大小太大了(图片—内联元素,是与字基线对齐。因此导致它这样了)解决办法:让它变成块盒 将这个设为全局样式

2. 菜单开关




这两个书写顺序不一样,显示的位置是不一样的(和css有关,官网就是先开关,只是我的 “惯性思维” 从左到右依次写过去)

less里头& 相当于没有空格

3. 菜单导航

1, 整个导航内容也是固定定位
2, 它不是通过显示和隐藏 而是先宽高、透明度都为0,展开的时候为100%

2. 弹出窗

网页中有很多弹出框有些样式是统一的,写的时候按样式最多的来写,别的用的时候再减去

1. 遮罩层
  • 固定定位
2. 弹出框
  1. 高度是自适应的哦


这个选中框是个图片

3. 垂直居中的三种方法
  • 定位 margin-left (需要知道/定元素宽高)
  • transform
  • flex布局
4. 视频弹窗
  • 播放控件 controls
  • object-fit
  • 打开之后自动播放,要获取到vedio元素
// videoDom 是获取到的 video 元素
videoDom.play(); // 播放
videoDom.pause(); // 暂停
  • 点击关闭按钮的时候视频也停止播放(特殊设置)
3. 上下可滑动的页面


静止状态

  1. 溢出隐藏
  2. 显示出来的页面的z-index是最低的,这样滑动的时候别的页面才能在它上层
  3. 页面布局?就是按顺序设置它们的top值。显示时top值为0 (先获取到视口宽高)
4. 第一页页面布局

小三角是伪元素

5. 轮播图

内容:

  • 主图
  • 指示器(绝对定位,然后让里面的 li 垂直居中,垂直居中可以用flex)
  • 左右箭头

js逻辑代码

1. 点击显示/隐藏菜单导航栏

使用到H5的内容,classList里头有个toggle属性。有类名就去掉,没有就加上

当显示别的内容之后,点击任意位置就收起菜单栏(这样就不会一直展示菜单导航栏了)

ulNav.addEventListener("click",function(){
        toggleNav();
    })
2. 显示弹出框

3. 选中平台
  • ClassList.add( )
  • ClassList.remove( )
4. 上下可滑动的页面 ▲

滑动的时候

  • 只可以变动视口以外的页面,视口显示的页面是不可以移动的
  • 防止误滑,滑动距离< 20 时设为0

完成(松手)的时候

  • 需要知道哪个相邻页面被滑到视口区域了
    • 手touch的时候记录下那时候的位置,然后开始监听手的滑动距离,手松开的时候清除监听
    • 如果为负值则向上,正值向下
  • 然后自动 “填充” 到视口,更改pageIndex 调用静态方法

页面盒子添加事件,监听用户行为

5. 直接切换到某个板块 ▲

点击菜单导航内容的时候会自动滑动到相应页面

  1. 对应滑动
  2. 在当前页面的时候,点击当前内容,也是有动画效果的。那怎么做呢?
    将它往下/上移动一下之后再复原

滑动小细节

  1. 从第一页滑到最后一页的距离和相邻两页的距离是不一样的,而transition设置的都为500ms,所以会有微小的不一样那怎么解决呢?

6. 轮播图

思路分析:因为页面中有两个轮播图,所以提取公共样式

  1. 使用模板字符串,动态的生成轮播图元素
  2. 设置它们静止时的状态
    • 主图的margin-left
    • 提示器的显示
  3. 自动播放和停止播放的方法
  4. 人为操作时:
    • 慢慢滑动 (判断放手时的位置和开始的位置,大于宽度的一半 就可以调用下一页/上一页的方法;否则就是设置静止状态)
    • 快速滑动(判断手点击到放开的时间、滑动的距离)

最后:封装起来;两个参数:轮播图id,轮播图数据 (在相应的页面js中调用)

7. 第二页后半部分—获取新闻数据渲染新闻列表

LOL手游新闻数据获取地址:https://apps.game.qq/cmc/cross?serviceId=166&source=web_pc&filter=channel&chanid=4897&typeids=1&limit=4&start=0&sortby=sIdxTime

  1. 存在跨域问题,这边使用了封装好的Ajax

封装代理请求

async function ajax(url) {
  var reg = /http[s]?:\/\/[^/]+/;
  var matches = url.match(reg);
  if (matches.length === 0) {
    throw new Error("invalid url");
  }
  var target = matches[0];
  var path = url.replace(reg, "");
  return await fetch(`https://proxy.yuanjin.tech${path}`, {
    headers: {
      target,
    },
  }).then((r) => r.json());
}

如何使用

ajax(url地址).then(resp=>{
  console.log(resp); // 服务器的响应结果
})
8. 第三页

阻止浏览器默认行为
dom.addEventListener("touchmove", function(e){
  if (e.cancelable) { // 如果事件可以取消
    e.preventDefault(); // 取消事件 - 阻止默认行为
  }
}, {
  passive: false // 指示浏览器:我的事件处理函数中有可能要取消默认行为
})

passive如果为true,表示处理函数永远不会调用preventDefault,如果调用了,会收到浏览器的一个警告。

passive如果为false,表示处理函数可以调用preventDefault

大部分情况下,passive的默认值都是false,但是在移动浏览器上,针对touchstarttouchmove,它的默认值是true,这就导致了默认情况下,在touchmove中无法阻止默认行为

这样设计的背后,是考虑浏览器的性能,不得以而为之的。


将写的内容放到仓库

创建并切换分支

git checkout -b branchName

添加

  • 单个文件
git add readme.md
  • 所有
git add .

提交

git commit -m 'add readme.md'

push到仓库

git push origin branchName

真机调试

保持手机和PC在同一局域网

  1. 利用 live server 搭建开发服务器

  2. 查看PC的局域网IP地址

    • windows 使用命令 ipconfig
      win+r 调出cmd
    • mac 使用命令 ifconfig
  3. 使用局域网IP地址访问开发服务器

    格式示例:http://192.168.2.6:5500/index.html

  4. 将该地址生成二维码

    可以使用在线二维码生成器:https://cli.im/

  5. 用手机扫描二维码

部署

icon后续添加可能会显示不了,因为浏览器第一次加载的时候缓存了,后头就不会再进行缓存
ctrl + shift + R 强制刷新后就可以展现了


结果

  • 真机调试失败(可能没在局域网里头
  • 部署完却看不到结果…sad

本文标签: 布局英雄联盟主页rem