制作web端的图片搜索站点(看冰冰)

简介: 制作web端的图片搜索站点(看冰冰)

前言

大家好,我是yma16,本文分享制作web端的图片搜索站点。

antdeisgnvue image用法

代码嵌入:

<template>
  <a-image
    :width="200"
    src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
  />
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({});
</script>

预览

发布链接:http://yongma16.xyz/emoji/index/

pc端

手机端

github地址:点击传送

例:搜索央视主持人王冰冰则出现冰冰的图片(可选择缩放)

背景

有时候聊天,斗图找不到图片以级想欣赏精致的五官和风景放松心情,同时近期又在使用vue3+antd,所以想制作一个图片搜索引擎的站点。

技术选型

前端:vue3+antd+axios

后端:django的爬虫制作接口(模拟百度搜索图片返回搜索结果的json数据)

思路

前端:

目录结构

trickers前端项目           
├─public
│      favicon.ico
│      index.html
└─src
    │  App.vue
    │  main.js
    │  tricher.txt
    ├─assets
    │      background.png
    │      happy.gif
    ├─components
    │      Home.vue
    ├─emoji
    │      Emoji.vue
    └─services
            getEmojiApi.js

后端:

ui框架

ant-design-vue

主要代码块:

<template>
  <div class="emoji">
    <a-spin :spinning="spinning" :delay="delay" class="home-emoji-loading">
      <div class="emoji-img">
        <a-card :title="searchTitle ? '关键词:' + searchTitle : '欢迎搜索图片与表情包'">
          <template v-for="(item, index) in showEmoji.showImg" :key="index">
            <!-- <a-card-grid class="grid-img-class"> -->
            <a-image :src="item" class="card-img-image" />
            <!-- </a-card-grid> -->
          </template>
        </a-card>
      </div>
      <!-- 分页 -->
      <div class="emoji-page">
        <a-pagination
          v-model:current="pageData.crurentPage"
          :page-size="pageData.splitNum"
          @change="gotoCurrentPage(pageData.crurentPage, pageData.total)"
          :total="pageData.total"
          :show-total="(total) => `总共 ${total} 记录`"
        />
      </div>
    </a-spin>
  </div>
</template>
<script>
import { reactive, onMounted, toRefs, watch } from "vue";
export default {
  name: "Emoji",
  props: {
    spinning: Boolean,
    delay: Number,
    emojiData: Array,
    emojiTotal: Number,
    searchWords: String,
    searchTitle: String,
  },
  setup(props) {
    const { emojiData } = toRefs(props);
    const cardTitle = reactive({
      title: "搜索结果",
    });
    const pageData = reactive({
      crurentPage: 1,
      total: emojiData.value.length,
      splitNum: 15,
    });
    // 展示数据
    const showEmoji = reactive({
      showImg: [],
    });
    // 制作一个分页,一页有十张图片
    function pageSplit() {
      if (emojiData && emojiData !== []) {
        // 存在
        pageData.crurentPage = 1;
        showEmoji.showImg = [];
        pageData.total = props.emojiTotal;
        if (props.pageTotal <= pageData.splitNum) {
          // 开始分页
          showEmoji.showImg = emojiData;
        } else {
          for (let imgLoc = 0; imgLoc < pageData.splitNum; ++imgLoc) {
            showEmoji.showImg.push(props.emojiData[imgLoc]);
          }
        }
      }
    }
    onMounted(() => {
      // 分页
      pageSplit();
    });
    watch(
      () => {
        props.emojiData;
      },
      () => {
        console.log(props.searchTitle, "emoji组件渲染图片");
        pageSplit();
      },
      {
        immediate: false,
        deep: true,
      }
    );
    //点击分页跳转
    watch(
      () => {
        pageData;
      },
      () => {
        pageSplit();
        const page = (pageData.crurentPage = 1);
        const pageSize = (pageData.total = props.emojiTotal);
        gotoCurrentPage(page, pageSize);
      },
      {
        immediate: true,
        deep: true,
      }
    );
    function gotoCurrentPage(page, pageSize) {
      console.log("翻页", page);
      let length = pageSize;
      showEmoji.showImg = [];
      for (
        let imgLoc = pageData.splitNum * (page - 1);
        imgLoc < pageData.splitNum * page && imgLoc < length;
        ++imgLoc
      ) {
        //
        showEmoji.showImg.push(props.emojiData[imgLoc]);
      }
    }
    return {
      ...props,
      cardTitle,
      showEmoji,
      pageData,
      gotoCurrentPage,
    };
  },
};
</script>
<style scoped>
.emoji {
  position: relative;
  display: block;
  left: 50%;
  transform: translateX(-50%);
  width: 80%;
  overflow: auto;
  box-sizing: border-box;
  box-shadow: 5px 5px 20px rgba(0, 0, 0, 0.18);
}
.emoji-img {
  position: relative;
  width: 100%;
}
.emoji-page {
  margin-top: 5px;
  text-align: right;
}
.grid-img-class {
  width: 20%;
  height: 200px;
  text-align: center;
  overflow: auto;
  align-content: center;
  justify-items: center;
}
.grid-img-class::-webkit-scrollbar-track {
  border-radius: 2px;
  background: #b46868;
}
/* 滚动条的滑轨背景颜色 */
.grid-img-class::-webkit-scrollbar-thumb {
  height: 5px;
  border-radius: 2px;
  background: rgba(17, 227, 255, 0.2);
}
/* 滑块颜色 */
.grid-img-class::-webkit-scrollbar-button {
  border-radius: 2px;
  background: #ffa581;
}
/* 滑轨两头的监听按钮颜色 */
.grid-img-class::-webkit-scrollbar-corner {
  border-radius: 2px;
  background: rgb(81, 255, 226);
}
/* 横向滚动条和纵向滚动条相交处尖角的颜色 */
.card-img-image {
  position: relative;
  height: 110px;
}
@media only screen and (max-width: 600px) {
  .grid-img-class {
    width: 100%;
  }
  .emoji {
    overflow: auto;
  }
  .card-img-image {
    height: auto;
  }
}
</style>

结束

感谢阅读!

结束

本文分享到这结束,如有错误或者不足之处欢迎指出,感谢大家的阅读!

目录
相关文章
|
4月前
|
安全 网络安全 开发者
OpenWRT搭建个人web站点并结合内网穿透实现公网远程访问
OpenWRT搭建个人web站点并结合内网穿透实现公网远程访问
167 0
|
7月前
|
安全 关系型数据库 MySQL
【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」
【IIS搭建网站】本地电脑做服务器搭建web站点并公网访问「内网穿透」
|
3月前
|
安全 网络安全 开发者
如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点
如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点
137 0
|
4月前
|
安全 Linux 网络安全
百度搜索:蓝易云【公网访问的Linux CentOS本地Web站点搭建指南】
请注意,将Web站点放在公网上可能涉及安全风险,建议您确保Web应用程序的安全性,并根据需要进行必要的防护措施,如防火墙设置、使用HTTPS等,以保障您的服务器和数据的安全。
124 0
|
5月前
|
人工智能 安全 网络安全
轻松搭建个人web站点:OpenWRT教程结合内网穿透技术实现公网远程访问
轻松搭建个人web站点:OpenWRT教程结合内网穿透技术实现公网远程访问
|
7月前
|
弹性计算 关系型数据库 MySQL
阿里云服务器使用教程参考,阿里云服务器搭建Web站点图文教程指导
购买阿里云服务器并搭建Web站点来部署自己的个人或者企业网站是绝大部分用户购买云服务器的目的,很多初次接触云服务器的用户在购买完阿里云服务器之后不知道如何搭建Web站点,下面是两种最常见且简单的在阿里云服务器上搭建搭建Web站点的图文教程指导,仅供各位新手用户们参考。
阿里云服务器使用教程参考,阿里云服务器搭建Web站点图文教程指导
|
8月前
|
Linux 网络安全 Apache
在树莓派上搭建web站点并发布互联网上线【无需公网IP】
在树莓派上搭建web站点并发布互联网上线【无需公网IP】
|
8月前
|
弹性计算 监控 应用服务中间件
网站用户流量分析—适用于电商网站、资讯网站、游戏主站等各类Web站点场景
本教程介绍如何使用日志服务采集NGINX日志,创建仪表盘分析用户访问行为。
103 0
|
8月前
|
存储 Apache 文件存储
Apache On Windows 如何使用阿里云NAS作为WEB站点目录
在Windows操作系统运行Apache WEB服务器的用户如何使用阿里云NAS共享作为WEB 站点目录。
214 0
|
9月前
|
Linux 网络安全 Apache
【无需公网IP】在树莓派上搭建Web站点
这非常适合设置您的第一个网站,不仅可以学习管理 wordpress 站点,还可以学习 Linux。您将需要一个树莓派(Raspberry Pi)、几个小时和一台计算机来下载映像。 树莓派(RPI) 是学习这些东西的完美设备。