项目1:前端导航网站

146 阅读2分钟

源码地址: github.com/atlfsj/nov-…

做好一个项目:1.定一个目标逐步完成 2.做出看不出bug的就行

禁止双指放大的meta:抄现成网站的(换成手机页面点刷新)

css中的层级关系可以跳级,只要是层级嵌套就行
body{backgroundcolor: red}会自动渲染整个页面
少用一点height,大部分用flex布局解决
当css加了border-radius时样式很怪,是因为body有默认的border,要覆盖掉
一般情况下块级元素不放入内联元素里。但(内联)特殊,他允许

实现搜索:form表单功能,构造请求。

但加了form后css会失效,因此要给form加class再调试
indexOf()函数 //查找字串中指定字符或字串首次出现的位置,返首索引值

创建站点:jquery操作

引入BootCDN中的jquery的min.js的script标签
console.log(jQuery)判断是否引入成功

跳转链接后回到导航页面,储存之前创建的站点:hashMap,localStorage

此时你会发现,hashMap直接生成了logo和url,就没必要在html里写了,直接遍历生成对应的li即可

const hashMap = [
    { logo:'A', logoType:'text', url:'https://www.acfun.cn'},
    { logo:'B', logoType:'text', url:'https://www.bilibili.com'},
]
hashMap.forEach(node=>{
    const $li = $(`<li>
        <a href="${node.url}">
            <div class="site">
                <div class="logo">${node.logo[0]}</div>
                <div class="link">${node.url}</div>
            </div>
        </a>
    </li>`).insertBefore($lastLi) 
})

此时你会发现,addButton里的li也不需要了,每次点击新增网站只需要重新渲染hashMap即可

hashMap.push({
            logo: url[0],
            logoType: 'text',
            url: url
        })

因为AB站点已经添加过了,因此再渲染hashMap会又出现AB,需要remove()掉第一次的再渲染

$siteList.find('li:not(.last)').remove()

然后你又发现了,forEach用一个函数封装起来调用就行
当用户要关闭页面时,需要用 window.onbeforeunload 获取。为了能看到是否获取到,要打开preserve log;查看localStorage,在Application里。

console.log('页面要关闭了)
const string = JSON.stringify(hashMap)      //对象变成字符串
console.log(typeof hashMap)     //object
console.log(hashMap)            //(2)[{..},{..}]
console.log(typeof string)      //string
console.log(string)   
localStorage.setItem('x',string)    //在本地存储里面设置一个key=x,value=string        

再往后就捏妈的真难懂,艹

const x = localStorage.getItem('x')         //从onbeforeunload尝试读取了一个(类型string的)x
const xObject = JSON.parse(x)               //字符串变对象
const hashMap = xObject || [                //如果有object,就渲染;没有就渲染AB
    { logo:'A', logoType:'text', url:'https://www.acfun.cn'},
    { logo:'B', logoType:'text', url:'https://www.bilibili.com'}
]               

这三行啥意思?
就是有了localhostStorage(x开始为空)了,hashMap这时候的值就不只是AB了,而是localhostStorage中的x不为空的时候就用x,没有就用AB

让localstorage储存的数据消失:

  1. 隐私设置-清除cookie即可
  2. 无痕浏览

点击关闭按扭会触发站点跳转:阻止冒泡 stopPropagation

这时候你会发现,a标签的存在无法阻止冒泡,所以去掉a标签用js代替

<a href="${node.url}"><div class="site"><div class="logo">${node.logo}</div><div class="link">${simplifyUrl(node.url)}</div></div></a>

去掉a,添加

$li.on('click',()=>{
    window.open(node.url)
})

PC端页面大小:媒体查询@media

做pc后要注意可能会影响到手机样式,所以要及时检查,用媒体查询修改 justify-content :flex-start

监听键盘事件:document比较好用

新的知识点:

  • 搜索页面跳转:form表单
  • 新增网站的样式:jquery操作获取新增的站点,填入初始站点结构的新站点,插入‘新增站点’前面
  • 多行字符串``
  • parcel会默认产生一个作用域,因此定义全局变量的时候要用window
  • const string = JSON.stringify(hashMap) //对象变成字符串
  • const xObject = JSON.parse(x) //字符串变对象
  • 首字母去掉w/h:设置一个函数simplifyUrl,它不会改变原来的url 【mian.js第十行】
  • 字符变大写:toUpperCase()---js ; text-transform:uppercase---css
  • 三十分钟入门正则表达式:.replace(//.*/, '') // 删除 / 开头的内容
  • @media(){} //if()则{}
display :none      //图像消失
.site:hover > .close{display :block}    //鼠标悬浮图像显示
cursor:pointer    //鼠标变手型
cursor : default   //手型鼠标到图像变回默认