基于原生 js 实现今日新闻网站

一、今日新闻网站设计报告

1.1 1 设计思路

该网站设计大部分都是基于原生 js 实现。基本思想为首先将基本的页面架构包括 header,导航条写好。之后根据后台 PHP 请求接口请求返回 JSON 格式数据后,对获得的数据进行整理渲染结构化。根据获取到的每条新闻的数据不同渲染出不同的页面样式添加到容器里面即可。支持数据的刷新,收藏新闻,切换新闻类型,阅读新闻详情等基本功能。

1.2 2 技术运用

整体项目工程化利用 webpack 进行打包。用到的主要技术有基本编程语言 HTML,scss,JavaScript 大部分为 es6 的代码,PHP。其他的技术栈主要包括 tpl 模板变量,前端缓存池以及 localStorage 存储, nginx 反向代理实现跨域,封装 AJAX 数据请求,图片的懒加载,以及最后的项目上线域名访问等。

1.3 3 栏目设计

准备部分

Webpack 部分

先建立好整体的项目架构目录。主要就是 webpack,因为本课程重心不在此,所以不需赘述,比较重要的依赖就是 babel 转义 es6+ 到 es5,sass-loader 处理 scss 文件,ejs-loader 处理模板文件,autoprefixer 配置兼容,以及最重要的 webpack 三件套。Npm install 后创建完后就是最头疼的 webpack.config.js 配置文件,需要配置的主要就是基本的入口文件,输出文件,module 模块设置,plugin 插件配置等,以及 server 服务器配置。

CSS 部分

包括基本的 iconfont 图标字体,样式清除 reset 的 CSS 等。

资源部分

包括基本的加载动图,各种样式图片等。

Js 部分

因为适配的是移动端,解决移动端的双击 click 判断是点击还是缩放造成的 300 毫秒的延迟,这里直接引用别人封装好的 fastclick 文件即可。最后就是移动端适配设置 rem。

页面主要结构

头部 header

导航栏

新闻容器

1.4 4 流程设计

1.5 5 模块功能设计

基本页面结构

需要首先渲染出首页,详情页,收藏页三个最基本页面。因为页面首部都是一样的,直接写出一个模板复用即可,如下图所示。需要替换的部分都用 mustache 语法控制,包括超链接的指向,首部左右侧的图标显示与否。

样式因为比较容易,不做赘述,基本都是弹性盒的运用。

每个基础页面对应的 js 入口文件中,在页面初始化 init 之后进入 render 函数里面

后,根据每个页面的不同配置相应的配置信息(比如首页左上角没有图标,而收藏页左上角应该存在返回主页的图标)。随后我们将这个配置信息传入 tpl 中(header 模块以事先 import 导入),关键代码如下。

Header 对应的 js 导出模块

Tplreplace 即是实现更改{{}}中的值,我们将其封装到工具库 utils.js 下。主要是使用了正则表达式的匹配思想。需要注意的是参数 args[1]才是我们需要替换的,下标 0 对应的是正则表达式匹配到的字符串,我们需要替换的是()里面的值。

添加配置信息

Render 函数渲染

添加到对应页面之下


这样我们就可以实现动态添加,模块化的思想方便后期维护。

实现效果如下。

导航条部分

其 tpl 模板较为简单,主要是需要替换的参数的值。

CSS 部分比较关键的是就是滚动条的控制

主要是 js 部分

首先是滚动条的长度,这里我们需要提前先写好数据的分类格式,格式中涉及到的分类需要根据请求的接口来决定,这里先写死到一个对象即可。

根据这个对象的键值对信息以及长度来决定导航条的渲染结果,这里主要使用了 itemList 来暂时存储,遍历这个对象来迭代存储。

最终这个 itemList 的信息如下

根据这个信息我们即可渲染 header 的同理继续追加到 HTML 中。

实现效果如下。

数据请求部分

这是整篇设计中最核心也是花费时间最多的部分,没有想象的简单。

首先需要攥写 PHP 的数据请求部分,核心部分如下。

因为不好演示效果,这里弄了一个小 demo 测试请求

测试用的前端代码比较简单,主要就是直接用了 jQuery 封装的 AJAX 请求测试即可,核心代码如下。

点击按钮后使用 PHP 向接口请求数据并返回。

但是在实际的项目中,jQuery 的性能不知道为什么表现很差。这里之前封装的 AJAX 对数据进行 post 请求。

AJAX 配置部分代码

响应变化请求

一样的道理,这样就可以实现数据的请求,但是出现了跨域请求,令我头大。因为这个接口只支持 JSON 格式的数据,本来想用 JSONP 跨域请求但是无功而返,最后使用了 nginx 反向代理了接口的请求网址。我在自己的腾讯云服务器上完成了操作,在配置文件中添加了响应头支持跨域。这样相当于在自己的服务器上做了一个中转,实现了跨域请求。

响应头添加如下。

数据规格化

因为返回数据格式可能不是我们想要的,可能这不是我们想要的,如下所示。

在数据返回后,我们可以直接进行格式设置,如下。

SetpageData 函数如下,因为这个接口的缘故,每次返回的都是同一类型的 30 组数据,我们需要对其进行分页,方便后续的刷新。Count 的初始值为 10,意为 30 组数据,划分为 3 组,每组 10 条新闻。每 10 条新闻一页,每次也只渲染出一页。



基于原生js实现今日新闻网站相关推荐

  1. 基于原生js的图片延迟加载

    当页面图片比较多的时候,我们通常会做一个延迟加载,避免页面打开时一下子的请求数太多,加载过慢影响用户体验. 如果项目用了jquery框架,则可以直接用 jquery.lazyload.可在jquery ...

  2. 基于原生JS项目使用Vue3 + Surely Vue Table组件

    Js & Surely Vue Table 本文主要说明,基于原生JS项目如何使用Surely Vue Table组件. Surely Vue Surely Vue Table 是 Ant D ...

  3. 原生html中modal,基于原生JS封装的Modal对话框插件

    基于原生JS封装Modal对话框插件 原生JS封装Modal对话框插件,个人用来学习原理与思想,只有简单的基本框架的实现,可在此基础上添加更多配置项 API配置 //基本语法 let modal = ...

  4. 基于原生js雷霆战机

    本篇文章是基于原生js使用函数制作 游戏预览 html部分 <!DOCTYPE html> <html lang="en"><head>< ...

  5. 基于原生js实现主流弹幕的所有功能

    原生js实现弹幕效果原理 二 距离写实现原理一有很长一段时间了,因为好像没什么人看,所以我就不太想写原理二,为了不食言,我还是坚持做完这个系列吧 下面介绍的就是目前主流直播弹幕网站的弹幕实现方式,包括 ...

  6. 基于原生JS写的异形轮播图--效果如网易云、QQ音乐播放器中轮播图

    css部分 <style>#box{height:500px;width:1000px;position: relative;margin:100px auto;overflow: hid ...

  7. js:基于原生js的上啦下啦刷新功能

    链接:https://www.jianshu.com/p/a8392115e6f0演示地址:http://wonghan.cn/iscroll-demo/html:<body><di ...

  8. 基于原生js和css3实现barrage弹幕效果

    实现原理 实现方式一(简单) 运行图 使用cancas画板实现.循环刷新和绘制画板像素,每一次循环更改绘制元素的x坐标 核心函数: clearRect(x,y,width,height) 在给定的矩形 ...

  9. 黄聪:原生js的音频播放器,兼容pc端和移动端(原创)

    更新时间:2018/9/3 下午1:32:54 更新说明:添加音乐的loop设置和ended事件监听 loop为ture的时候不执行ended事件 1 2 3 4 5 6 7 8 9 10 11 12 ...

  10. Mars3D功能示例原生JS版下载运行

    首先建议您学习浏览一遍我们功能示例的源码(源码中会有大量注释),阅读源码时可以结合查阅API文档来理解类及方法的作用和参数说明等. #项目介绍 这是一个基于 原生JS 开发的 mars3d 示例项目. ...

最新文章

  1. linux——管理系统设备之vsftpd服务
  2. 单核工作法13:永不拖延(上)
  3. SQL Server查询正在执行的存储过程并停止
  4. Docker 入门(3)Docke的安装和基本配置
  5. 【译】用 Chrome 开发者工具以及 react 16 版本分析性能
  6. Anaconda多环境多版本python配置笔记
  7. vue.js之过渡效果-css
  8. 美国计算机科学公司的全球化发展历程,计算机科学导论第1章 概述.ppt
  9. onLayout与onMeasure
  10. 面试官:select......for update会锁表还是锁行?
  11. ADS仿真 之 交流仿真和S参数仿真示例
  12. Hackthebox入门
  13. 我每年得忽悠10万程序员上车
  14. 20. Converting Dotted Decimal to Prefix Notation
  15. C# 判断本机是否安装Excel及多版本安装?获取Excel进程信息和打开Excel应用软件
  16. 【为什么换了固态硬盘电脑会快?详解硬盘与内存的关系】
  17. 钉钉新上线的「文字表情」功能--原来消息还可以这么回!
  18. 换脸检测论文 FaceForensics++: Learning to Detect Manipulated Facial Images相关资料
  19. Latex 彩色表格
  20. 光引发剂主要用途_可见光引发剂的应用

热门文章

  1. 明日之后第三季维护服务器,明日之后第三季导致服务器爆满:“一次更新竟助游戏重回巅峰?”...
  2. Linux nvme驱动分析之设备初始化
  3. VTK曲面重建技术(CPR)
  4. openAI注册chatGPT支持什么邮箱?
  5. [每日一题]35、利用Python在头像上加logo
  6. 12个C++ ico 图标网址
  7. 社区培训计算机的简报,技能培训进社区 市北区兴隆路街道第二期“社区培训班”顺利开班...
  8. 城市供水绩效指标解释
  9. 离开北京--北京干了三年的屌丝程序员一点废话
  10. 从害羞费c语言,C语言死渣男遇上图形时,与二维数组也“搞基”,为何有股羞涩感?不忍直视啊...