博客列表 >0408作业-Ajax、选项卡和换肤案例

0408作业-Ajax、选项卡和换肤案例

千山暮雪
千山暮雪原创
2021年04月11日 14:35:33500浏览

1. Ajax的get,post请求

jax即Asynchronous Javascript And XML(异步JavaScript和XML)在 2005年被Jesse James Garrett提出的新术语,用来描述一种使用现有技术集合的‘新’方法,包括: HTML 或 XHTML, CSS, JavaScript, DOM, XML, XSLT, 以及最重要的XMLHttpRequest。 [3] 使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

  • get


    前端请求
  1. <body>
  2. <button>ajax-get</button>
  3. <p class="tips"></p>
  4. <script>
  5. // 获得元素
  6. const btn = document.querySelector('button');
  7. const tips = document.querySelector('.tips');
  8. // btn点击事件
  9. btn.onclick = function () {
  10. // 1. 创建xhr对象
  11. const xhr = new XMLHttpRequest;
  12. // 2. 建立连接
  13. xhr.open('get', 'test1.php?id=2');
  14. xhr.responseType = 'json';
  15. // 3. 处理
  16. xhr.onload = ()=>{
  17. tips.textContent = `name:${xhr.response.name},email:${xhr.response.email}`;
  18. }
  19. xhr.onerror = ()=>{alert('error')};
  20. // 4. 发送
  21. xhr.send(null);
  22. }
  23. </script>
  24. </body>

后端处理

  1. $users = [
  2. ['id'=>1,'name'=>'张三','email'=>'zs@qq.com'],
  3. ['id'=>2,'name'=>'李四','email'=>'ls@qq.com'],
  4. ['id'=>3,'name'=>'王五','email'=>'ww@qq.com'],
  5. ];
  6. $id = $_GET['id'];
  7. $key = array_search($id,array_column($users,'id'));
  8. echo json_encode($users[$key]);
  • post

    使用FormData传参
    FormData 接口提供了一种表示表单数据的键值对 key/value 的构造方式,并且可以轻松的将数据通过XMLHttpRequest.send() 方法发送出去,本接口和此方法都相当简单直接。

前端

  1. <body>
  2. <div class="container">
  3. <p>用户登录</p>
  4. <form action="" onsubmit="return false">
  5. <label for="email">邮箱:</label>
  6. <input type="email" name="email" id="email" placeholder="demo@email.com" />
  7. <label for="pwd">密码:</label>
  8. <input type="password" name="pwd" id="pwd" placeholder="不少于6位" />
  9. <button>提交</button>
  10. <span class="tips"></span>
  11. </form>
  12. </div>
  13. <script>
  14. // 获取元素
  15. const form = document.querySelector('.container >form');
  16. const btn = document.querySelector('.container > form button');
  17. const tips = document.querySelector('.tips');
  18. //
  19. btn.onclick = ()=>{
  20. // 通过formData获得表单数据
  21. let data = new FormData(form);
  22. // xhr
  23. // 1. 建立xhr对象
  24. const xhr = new XMLHttpRequest();
  25. // 2. 配置xhr参数
  26. xhr.open('post', 'test2.php');
  27. // 3. 处理xhr响应
  28. xhr.onload = () => {
  29. tips.textContent = xhr.response
  30. }
  31. // 4. 发送xhr请求
  32. xhr.send(data);
  33. }
  34. </script>
  35. </body>

后台

  1. $users= [
  2. ['id'=>1,'name'=>'张三','email'=>'zs@qq.com','pwd'=>'123456'],
  3. ['id'=>2,'name'=>'李四','email'=>'ls@qq.com','pwd'=>'123456'],
  4. ['id'=>3,'name'=>'王五','email'=>'ww@qq.com','pwd'=>'123456'],
  5. ];
  6. $email = $_POST['email'];
  7. $pwd = $_POST['pwd'];
  8. $res = array_filter($users, function ($user) use ($email, $pwd) {
  9. return $user['email'] === $email && $user['pwd'] === $pwd;
  10. });
  11. // 将结果做为请求响应返回到前端
  12. echo count($res) === 1 ? '验证成功' : '验证失败';

2. 选顶卡案例

点击导航标签,内容会切换

  • css
  1. <style>
  2. * {
  3. padding: 0;
  4. margin: 0;
  5. box-sizing: border-box;
  6. }
  7. :root {
  8. font-size: 10px;
  9. }
  10. a {
  11. text-decoration: none;
  12. color: #555;
  13. }
  14. a:hover {
  15. text-decoration: underline;
  16. color: red;
  17. }
  18. li {
  19. list-style: none;
  20. line-height: 1.6em;
  21. }
  22. li:hover {
  23. cursor: default;
  24. }
  25. .container {
  26. width: 30rem;
  27. height: 30rem;
  28. margin: 30em;
  29. font-size: 1.6rem;
  30. background-color: #e6e6e6;
  31. display: flex;
  32. flex-flow: column;
  33. }
  34. .container nav ul{
  35. height: 3.6rem;
  36. display: flex;
  37. }
  38. .container nav li {
  39. flex: auto;
  40. text-align: center;
  41. line-height: 3.6rem;
  42. background-color: #fff;
  43. }
  44. .container nav li.active {
  45. background-color: #e6e6e6;
  46. }
  47. .item {
  48. padding: 3rem;
  49. display: none;
  50. }
  51. .item.active {
  52. display: block;
  53. }
  54. </style>
  • html
  1. <div class="container">
  2. <nav>
  3. <ul class="tab">
  4. <li class="active" data-index="1">技术文章</li>
  5. <li data-index="2">网站源码</li>
  6. <li data-index="3">原生手册</li>
  7. </ul>
  8. </nav>
  9. <ul class="item active" data-index="1">
  10. <li>PHP7新特性的快速总结</li>
  11. <li>PHP7新特性的快速总结</li>
  12. <li>PHP7新特性的快速总结</li>
  13. <li>PHP7新特性的快速总结</li>
  14. <li>PHP7新特性的快速总结</li>
  15. <li>PHP7新特性的快速总结</li>
  16. </ul>
  17. <ul class="item" data-index="2">
  18. <li>帝国cms仿婚纱摄影网站</li>
  19. <li>帝国cms仿婚纱摄影网站</li>
  20. <li>帝国cms仿婚纱摄影网站</li>
  21. <li>帝国cms仿婚纱摄影网站</li>
  22. <li>帝国cms仿婚纱摄影网站</li>
  23. </ul>
  24. <ul class="item" data-index="3">
  25. <li>PHP7的内核剖析</li>
  26. <li>PHP7的内核剖析</li>
  27. <li>PHP7的内核剖析</li>
  28. <li>PHP7的内核剖析</li>
  29. <li>PHP7的内核剖析</li>
  30. </ul>
  31. </div>
  • js
  1. // 获得元素
  2. const nav = document.querySelector('nav ul');
  3. const tabs = document.querySelectorAll('nav ul li');
  4. const items = document.querySelectorAll('ul.item');
  5. // 事件代理
  6. nav.addEventListener('click', (ev) => {
  7. let index = ev.target.dataset.index;
  8. [tabs,items].forEach((e)=>{
  9. e.forEach((li) => {
  10. // 清除active
  11. li.classList.remove('active');
  12. })
  13. })
  14. // 设置激话
  15. ev.target.classList.add('active');
  16. [...items].filter((item)=>(item.dataset.index === index))[0].classList.add('active');
  17. })

3. 换肤案例

  • css
  1. * {
  2. padding: 0;
  3. margin: 0;
  4. box-sizing: border-box;
  5. }
  6. :root {
  7. font-size: 10px;
  8. }
  9. .container {
  10. width: 30rem;
  11. display: grid;
  12. grid-template-columns: repeat(3, 1fr);
  13. gap: 0 1rem;
  14. }
  15. .container > img {
  16. width: 100%;
  17. opacity: 0.6;
  18. border: 3px solid #fff;
  19. }
  20. .container > img:hover {
  21. width: 110%;
  22. opacity: 1;
  23. }
  24. body {
  25. background-repeat: no-repeat;
  26. background-size: cover;
  27. background-image: url('./images/1.jpg');
  28. }
  • html
  1. <div class="container">
  2. <img src="./images/1.jpg" alt="loading">
  3. <img src="./images/2.jpg" alt="loading">
  4. <img src="./images/3.jpg" alt="loading">
  5. </div>
  • js
  1. const container = document.querySelector('.container');
  2. const body = document.querySelector('body');
  3. // 事件代理
  4. container.onclick = (ev) => {
  5. let imgUrl = ev.target.src;
  6. body.style.backgroundImage = `url('${imgUrl}')`;
  7. };
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议