博客列表 >ajax 的 get, post 请求;实战:选项卡和一键换肤----0408

ajax 的 get, post 请求;实战:选项卡和一键换肤----0408

木樨
木樨原创
2021年04月20日 10:57:25662浏览

1.演示 Ajax 的 get,post 请求

1.1 ajax-get 请求

  1. <button>ajax-get请求</button>
  2. <p></p>
  3. <script>
  4. const btn = document.querySelector("button");
  5. btn.onclick = () => {
  6. // 1.创建 xhr 对象
  7. const xhr = new XMLHttpRequest();
  8. // 2.配置 xhr 参数
  9. xhr.open("get", "test.php?id=2");
  10. xhr.responseType = "json";
  11. // 3.处理 xhr 响应
  12. xhr.onload = () => {
  13. // 将返回的数据展示到页面
  14. let user = `${xhr.response.name}(${xhr.response.email})`;
  15. document.querySelector("p").textContent = user;
  16. };
  17. xhr.onerror = () => consle.log("Error");
  18. // 4.发送 xhr 请求:xhr.send(...)
  19. xhr.send(null);
  20. };
  21. </script>

1.2 ajax-post 请求

  1. <div class="login">
  2. <p>用户登录</p>
  3. <form action="" onsubmit="return false">
  4. <label for="email">邮箱:</label>
  5. <input type="email" name="email" id="email" placeholder="demo@email.com" />
  6. <label for="password">密码:</label>
  7. <input type="password" name="password" id="password" placeholder="不少于6位" />
  8. <button>提交</button>
  9. <span class="tips"></span>
  10. </form>
  11. </div>
  12. <script>
  13. const form = document.querySelector(".login form");
  14. const btn = document.querySelector(".login button");
  15. const tips = document.querySelector(".tips");
  16. btn.onclick = ev => {
  17. let data = new FormData(form);
  18. // 禁止默认提交行为
  19. ev.preventDefault();
  20. // 1.创建 xhr 对象
  21. const xhr = new XMLHttpRequest();
  22. // 2.配置 xhr 参数
  23. xhr.open("post", "test2.php");
  24. // 3.处理 xhr 响应
  25. xhr.onload = () => {
  26. // 将返回的数据展示到页面
  27. tips.textContent = xhr.response;
  28. };
  29. xhr.onerror = () => consle.log("Error");
  30. // 4.发送 xhr 请求:xhr.send(...)
  31. xhr.send(data);
  32. };
  33. </script>

2.选顶卡

  1. <div class="tabs">
  2. <!-- 导航 -->
  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. <!-- 与导航标签页对应的详情列表 -->
  9. <ul data-index="1" class="item active">
  10. <li><a href="">新华社曝安徽亳州麦田“长”出</a></li>
  11. <li><a href="">新华社曝安徽亳州麦田“长”出</a></li>
  12. <li><a href="">新华社曝安徽亳州麦田“长”出</a></li>
  13. <li><a href="">新华社曝安徽亳州麦田“长”出</a></li>
  14. </ul>
  15. <ul data-index="2" class="item">
  16. <li><a href="">武汉机场跨境电商进出口猛</a></li>
  17. <li><a href="">武汉机场跨境电商进出口猛</a></li>
  18. <li><a href="">武汉机场跨境电商进出口猛</a></li>
  19. <li><a href="">武汉机场跨境电商进出口猛增</a></li>
  20. </ul>
  21. <ul data-index="3" class="item">
  22. <li><a href="">大湾区国际信息科技协会在港成立</a></li>
  23. <li><a href="">大湾区国际信息科技协会在港成立</a></li>
  24. <li><a href="">大湾区国际信息科技协会在港成立</a></li>
  25. <li><a href="">大湾区国际信息科技协会在港成立</a></li>
  26. </ul>
  27. </div>
  28. <script>
  29. // 事件代理实现导航的切换
  30. const tab = document.querySelector(".tab");
  31. const items = document.querySelectorAll(".item");
  32. tab.onclick = ev => {
  33. // 1.清空之前的激活样式,并将当前导航设置为激活状态
  34. [...tab.children].forEach(item => item.classList.remove("active"));
  35. ev.target.classList.add("active");
  36. // 2.根据 data-index 来确定应该将哪个列表进行激活并显示出来
  37. items.forEach(item => item.classList.remove("active"));
  38. // filter():匹配 data-index 中,与点击按钮相同的值,并设置激活样式
  39. [...items]
  40. .filter(item => item.dataset.index === ev.target.dataset.index)
  41. .pop()
  42. .classList.add("active");
  43. };
  44. </script>

css 文件:

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
  6. a {
  7. text-decoration: none;
  8. color: #555;
  9. }
  10. a:hover {
  11. text-decoration: underline;
  12. color: red;
  13. }
  14. li {
  15. list-style: none;
  16. line-height: 1.6em;
  17. }
  18. li:hover {
  19. cursor: default;
  20. }
  21. .tabs {
  22. width: 300px;
  23. height: 300px;
  24. margin: 30px;
  25. background-color: #e6e6e6;
  26. display: flex;
  27. flex-direction: column;
  28. }
  29. .tab {
  30. height: 36px;
  31. display: flex;
  32. }
  33. .tab li {
  34. flex: auto;
  35. text-align: center;
  36. line-height: 36px;
  37. background-color: #fff;
  38. }
  39. .tab li.active {
  40. background-color: #e6e6e6;
  41. }
  42. .tab li:hover {
  43. cursor: pointer;
  44. }
  45. /* 默认所有选项卡只有一个显示,其它隐藏 */
  46. .item {
  47. padding: 20px;
  48. display: none;
  49. }
  50. .item.active {
  51. display: block;
  52. }

3.一键换肤

  1. <div class="container">
  2. <img src="./images/1.jpg" alt="" />
  3. <img src="./images/2.jpg" alt="" />
  4. <img src="./images/3.jpg" alt="" />
  5. </div>
  6. <script>
  7. // 事件代理
  8. const box = document.querySelector(".container");
  9. box.onclick = function (ev) {
  10. // body
  11. const body = document.body;
  12. // 新的背景图片
  13. let imgUrl = `url('${ev.target.src}')`;
  14. body.style.backgroundImage = imgUrl;
  15. };
  16. // 使用箭头函数来简化
  17. // document.querySelector(".container").onclick = (ev) =>
  18. // (document.body.style.backgroundImage = `url('${ev.target.src}')`);
  19. </script>

css 文件:

  1. .container {
  2. width: 300px;
  3. display: grid;
  4. grid-template-columns: repeat(3, 1fr);
  5. column-gap: 10px;
  6. }
  7. .container > img {
  8. width: 100%;
  9. border: 3px solid #fff;
  10. opacity: 0.6;
  11. }
  12. .container > img:active {
  13. opacity: 1;
  14. }
  15. .container > img:hover {
  16. opacity: 1;
  17. cursor: pointer;
  18. width: 105%;
  19. }
  20. body {
  21. background-image: url("./images/1.jpg");
  22. background-size: cover;
  23. background-repeat: no-repeat;
  24. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议