javascript:layui实现定位、查询数据以及select筛选的组合功能

简介: javascript:layui实现定位、查询数据以及select筛选的组合功能


项目说明

  1. 1.layui前端UI,实现三个select筛选;
  2. 2.百度实时定位实现经纬度的获取和地址获取;
  3. 3.关键词搜索;


解决方案

关键词搜索

        $("#search_btn").click(function () {
            var keys = $("#keys").val();
            var lnglat = $("#lnglat").val();
            //筛选数据;
            getLocalData(lnglat, keys, "", "", "");
        })


自动定位

//自动定位;
        function bdGeo() {
            var geolocation = new BMap.Geolocation();
            geolocation.getCurrentPosition(function (r) {
                if (this.getStatus() == BMAP_STATUS_SUCCESS) {
                    //console.log(r.address);
                    $("#local").html("当前位置:" + r.address.province + r.address.city + r.address.district + r.address.street);
                    $("#lnglat").val(r.point.lng + "," + r.point.lat);
                    //获取列表;
                    getLocalData(r.point.lng + "," + r.point.lat, "", "", "", "");
                } else {
                    alert('failed' + this.getStatus());
                }
            }, function (error) {
                console.log(error);
            }, {
                enableHighAccuracy: true,
                timeout: 1000,
                maximumAge: 0
            });
        }


select筛选数据

layui Html

三组select筛选关键代码: lay-filter="mixSelect"

  <div class="weui-panel__bd">
            <form class="layui-form">
                <div class="layui-inline" style="width: 32%;margin-left: 1%;">
                    <select name="poi_category" id="poi_category" lay-filter="mixSelect">
                        <option value="">--医院级别--</option>
                        <option value="三级特等">三级特等</option>
                        <option value="三级甲等">三级甲等</option>
                        <option value="三级乙等">三级乙等</option>
                        <option value="三级丙等">三级丙等</option>
                        <option value="二级甲等">二级甲等</option>
                        <option value="二级乙等">二级乙等</option>
                        <option value="二级丙等">二级丙等</option>
                        <option value="一级甲等">一级甲等</option>
                        <option value="一级乙等">一级乙等</option>
                        <option value="一级丙等">一级丙等</option>
                    </select>
                </div>
                <div class="layui-inline" style="width: 32%;">
                    <select name="poi_type" id="poi_type" lay-filter="mixSelect">
                        <option value="">--医院性质--</option>
                        <option value="公立">公立</option>
                        <option value="私立">私立</option>
                    </select>
                </div>
                <div class="layui-inline" style="width: 32%;">
                    <select name="poi_distance" id="poi_distance" lay-filter="mixSelect">
                        <option value="">--附近--</option>
                        <option value="1">1千米内</option>
                        <option value="3">3千米内</option>
                        <option value="5">5千米内</option>
                        <option value="10">10千米内</option>
                    </select>
                </div>
            </form>
        </div>


layui获取数据

    layui.use(['form'], function () {
        $ = layui.jquery;
        var form = layui.form;
        form.on('select(mixSelect)', function (data) {
            var poi_category = $("#poi_category").val();
            var poi_type = $("#poi_type").val();
            var poi_distance = parseInt($("#poi_distance").val());
            if (!poi_distance) {
                poi_distance = listDistance / 1000
            }
            console.log(poi_distance);
            var keys = $("#keys").val();
            var lnglat = $("#lnglat").val();
            //筛选数据;
            getLocalData(lnglat, keys, poi_category, poi_type, poi_distance)
        });
    });


查询和筛选数据

    /*加载附近数据*/
    function getLocalData(lnglat, keys, poi_category, poi_type, poi_distance) {
        $.ajax({
            url: 'api/api.php?act=getDistance&token=3cab7ce4142608c0f40c785b5ab5ca24',
            async: true,
            type: 'get',
            data: {
                lnglat: lnglat,
                keys: keys
            },
            dataType: "json",
            success: function (res) {
                //console.log(res.data);
                /*过滤数据*/
                var newData = [];
                if (poi_category || poi_type || poi_distance) {
                    newData = filterData(res.data, poi_category, poi_type, poi_distance);
                } else {
                    newData = res.data;
                }
                var listHtml = '';
                for (var i = 0; i < newData.length; i++) {
                    listHtml += "<div class=\"weui-panel weui-panel_access\">"
                        + "<div class=\"weui-panel__hd\">" + newData[i].poi_category + "  " + newData[i].poi_type + "</span></div>"
                        + "<div class=\"weui-panel__bd\">"
                        + "<a href=\"javascript:\" class=\"weui-media-box weui-media-box_appmsg\">"
                        + " <div class=\"weui-media-box__hd\"><img class=\"weui-media-box__thumb\" src=\"" + newData[i].poi_img + "\" alt=\"\"></div>"
                        + "<div class=\"weui-media-box__bd\">"
                        + "<div class=\"weui-media-box__title hosTitle\">" + newData[i].poi_name + "</div>"
                        + "<div class=\"weui-media-box__desc\">" + limitWords(newData[i].poi_content, 50) + "</div>"
                        + "<div class=\"weui-media-box__desc2 layui-icon layui-icon-location\"> " + newData[i].poi_address + "</div>"
                        + "<div class=\"weui-media-box__desc2 layui-icon layui-icon-cellphone\"> " + newData[i].poi_telephone + "</div>"
                        + "</div></a>"
                        + "<div class=\"weui-media-box weui-media-box_text\">"
                        + "<ul style=\"padding-bottom:10px;float: right;\">"
                        + "<li class=\"weui-media-box__info__meta layui-icon layui-icon-find-fill\" style=\"font-size: 13px;\"> " + newData[i].poi_distance + "km <a href=\"//api.map.baidu.com/geocoder?location=" + newData[i].poi_lat + "," + newData[i].poi_lng + "&coord_type=bd09ll&output=html&src=lockdatav\">导航到这里</a></li>" +
                        "<a href=\"" + newData[i].poi_url + "\"><li class=\"weui-media-box__info__meta weui-media-box__info__meta_extra layui-icon layui-icon-link\" style=\"font-size: 13px;\"> 详情链接</li></a>" +
                        "</ul></div></div></div>"
                }
                $("#infoList").html(listHtml);
            },
            error: function (err) {
                console.log(err + "请求数据失败!");
            }
        });
    }


JSON数据过滤

/*数据筛选
* data, 过滤数组
* poi_category, 等级
* poi_type, 性质
* poi_distance,距离
* */
function filterData(data, poi_category, poi_type, poi_distance) {
    //console.log(typeof(poi_distance));
    var filters = [
        o => o.poi_category.toString().includes(poi_category),
        o => o.poi_type.toString().includes(poi_type),
        o => o.poi_distance < poi_distance
    ];
    var result = data.filter(o => filters.every(fn => fn(o)));
    return result;
}


@lockdata.cn

目录
打赏
0
0
0
0
184
分享
相关文章
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
133 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【Javascript系列】Terser除了压缩代码之外,还有优化代码的功能
Terser 是一款广泛应用于前端开发的 JavaScript 解析器和压缩工具,常被视为 Uglify-es 的替代品。它不仅能高效压缩代码体积,还能优化代码逻辑,提升可靠性。例如,在调试中发现,Terser 压缩后的代码对删除功能确认框逻辑进行了优化。常用参数包括 `compress`(启用压缩)、`mangle`(变量名混淆)和 `output`(输出配置)。更多高级用法可参考官方文档。
66 11
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
如何使用内存监控工具来定位和解决Node.js应用中的性能问题?
总之,利用内存监控工具结合代码分析和业务理解,能够逐步定位和解决 Node.js 应用中的性能问题,提高应用的运行效率和稳定性。需要耐心和细致地进行排查和优化,不断提升应用的性能表现。
247 77
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
59 10
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
67 8
带方向感知功能的js图片遮罩层插件
带方向感知功能的js图片遮罩层插件
jQuery多功能滑块插件r-slider.js
r-slider.js是一款jQuery多功能滑块插件。使用该插件,可以制作出滑块、开关按钮、进度条、向导步骤等多种效果。
85 5
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。

热门文章

最新文章