淘气的小丁-简易聊天器

简易聊天器

  1. 我们先放一个div,给他一个类为box,并且给他设置样式:.box {width: 500px; height: 600px; border: 2px solid #333; margin: 100px auto; background-image:url('../../Content/images/IMG_20210214_182510.jpg'); }
  2. 我们在里面放两个div,分别给他们一个类为box1,box2,设置一下box1的样式:  .box1 { width: 450px; height: 500px; border: 2px solid #333; margin: 10px 25px; background-image: url('../../Content/images/picture.jpg'); overflow: auto; }
  3. 我们先写box1里面的布局,在box1里面我们又放了两个div,分别给他们一个类为box11,box12,我们先给他们设置共同的样式:.box1 div{width:100%; box-sizing:border-box; padding:10px; }再给box12设置样式:  .box1 .box12{text-align:right; min-width:400px; }
  4. 我们再在这两个div中都放两个span标签,第一个div里面的span标签的文本分别为:A,在干嘛,第二个div里面的span标签的文本分别为:在干嘛,B并且给有在干嘛文本的span标签一个类为text-break,并且设置一下样式:word-wrap: break-word!important;/*用来换行*/
  5. 现在我们来写box2的布局,里面我们放一个select标签和两个input标签,select标签里面再放两个option标签,并且他们的value值分别为01,文本分别为A,B,第一个inpu标签给他一个类为input,并且设置一下它的宽,设置为340px,第二个input标签让它的type值为button并且它的value值为发送。

 

接下来我们写jQuery

  1. 首先我们写一个简写的ready事件。
  2. 选择到第二个input标签,并且给他绑定点击事件,然后我们声明三个变量分别为ssstext,将获取的selectvalue值赋值给变量s,将空赋值给变量ss,将第一个input标签的value值赋值给变量text
  3. 再做一个判断,如果变量text等于空就弹出警告框,再跳出不再执行后面的代码。
  4. 再来判断一下变量s,如果变量s等于0,则将'<div class="box11"> <span>  A </span><span class="text-break">' + text + '</span></div>';赋值给变量ss,否则如果变量s等于1,则将'<div class="box12"> <span class="text-break">' + text + ' </span><span>B</span></div>';赋值给变量ss。
  5. 最后获取一下box1,将变量ss添加进去,然后获取一下第一个input标签,让它的value值为空,这样就完成了一个简易聊天器。效果如下:

 

### 实现 Vue3 `el-select` 下拉框滚动分页加载 为了实现在 Vue3 中使用 Element Plus 的 `el-select` 组件并实现下拉列表中的滚动分页加载,可以采用自定义指令的方式。这种方法能够有效地监听滚动事件,并在接近底部时触发数据加载。 #### 自定义指令注册 通过创建一个名为 `elSelectLoadmore` 的自定义指令来增强 `el-select` 功能[^2]: ```typescript // src/directives/elSelectLoadMore.ts import { DirectiveBinding } from 'vue'; const elSelectLoadmore = { mounted(el: HTMLElement, binding: DirectiveBinding) { const selectWrapper = el.querySelector('.el-select-dropdown .el-scrollbar__wrap'); if (selectWrapper) { selectWrapper.addEventListener('scroll', () => { const scrollTop = selectWrapper.scrollTop; const clientHeight = selectWrapper.clientHeight; const scrollHeight = selectWrapper.scrollHeight; // 当滚动条距离底部小于等于0时触发加载更多逻辑 if (scrollTop + clientHeight >= scrollHeight - 5 && !binding.value.loading) { binding.value.loadMore(); } }); } }, }; export default elSelectLoadmore; ``` 此代码片段展示了如何监听 `.el-select-dropdown .el-scrollbar__wrap` 元素上的滚动事件,并判断是否到达了容的底部位置。一旦满足条件,则调用绑定对象内的 `loadMore()` 方法执行进一步的数据获取操作。 #### 使用自定义指令 接着,在应用初始化阶段全局注册该指令以便于后续组件内直接使用: ```typescript // main.ts or setup file import { createApp } from 'vue'; import App from './App.vue'; import elementPlus from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; import directive from '@/directives'; // 假设这是存放所有自定义指令的地方 createApp(App).use(elementPlus).use(directive).mount('#app'); ``` 最后,在具体的页面或组件中利用这个新引入的功能完成实际业务需求: ```html <template> <div class="example"> <el-select v-model="value" placeholder="请选择..." style="width: 100%;"> <!-- 这里放置选项 --> <el-option v-for="(item,index) in options" :key="index" :label="item.label" :value="item.value"></el-option> <!-- 如果正在加载则显示loading图标 --> <p v-if="loading">Loading...</p> <!-- 若无更多数据可加载提示 --> <p v-else-if="noMoreData">No more data</p> </el-select> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; export default defineComponent({ name: "Example", directives: { 'select-load-more': require('@/directives/elSelectLoadMore').default, }, setup() { let value = ref(''); let loading = ref(false); let noMoreData = ref(false); function loadMore() { console.log("尝试加载更多..."); // 设置标志位防止重复请求 loading.value = true; setTimeout(() => { // 模拟异步接口返回新的option项 for(let i=0; i<10; ++i){ options.value.push({ label:`Option ${options.value.length}`, value: `${Math.random().toString(36).substr(-8)}`}); } // 更新状态 loading.value = false; // 判断是否有更多的数据可供加载 if(options.value.length>=totalOptionsCount){ noMoreData.value=true; } }, 1000); }; return { value, loading, noMoreData, options:ref([]), totalOptionsCount:100,// 总共可能有的选项数量 loadMore }; } }) </script> <style scoped> .example{ width: 300px; } </style> ``` 上述模板部分包含了两个额外的状态变量用于指示当前是否处于加载过程中 (`loading`) 和是否存在未加载完毕的数据 (`noMoreData`) 。当用户滚动至最下方时会自动触发 `loadMore()` 函数模拟网络请求追加新项目到现有列表之中直到达到预设的最大数目为止。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值