相关疑难解决方法(0)

窗口内部宽度更改的AngularJS事件

我正在寻找一种方法来观察窗口内部宽度变化的变化.我尝试了以下内容,但没有奏效:

$scope.$watch('window.innerWidth', function() {
     console.log(window.innerWidth);
});
Run Code Online (Sandbox Code Playgroud)

有什么建议?

javascript jquery angularjs angularjs-scope

63
推荐指数
4
解决办法
11万
查看次数

简单的油门在js

我在JS寻找一个简单的油门.我知道像lodash和下划线这样的库有它,但只有一个函数包含任何这些库都是过度的.

我还在检查jquery是否有类似的功能 - 找不到.

我找到了一个工作油门,这是代码:

function throttle(fn, threshhold, scope) {
  threshhold || (threshhold = 250);
  var last,
      deferTimer;
  return function () {
    var context = scope || this;

    var now = +new Date,
        args = arguments;
    if (last && now < last + threshhold) {
      // hold on to it
      clearTimeout(deferTimer);
      deferTimer = setTimeout(function () {
        last = now;
        fn.apply(context, args);
      }, threshhold);
    } else {
      last = now;
      fn.apply(context, args);
    }
  };
}
Run Code Online (Sandbox Code Playgroud)

这个问题是:它在节流时间结束后再次激活该功能.所以我们假设我在按键时每隔10秒发一个油门 - 如果我按下2次按键,它会在10秒钟完成时触发第二次按键.我不想要这种行为.

javascript jquery

56
推荐指数
8
解决办法
5万
查看次数

节流和去抖功能

我对油门和去抖功能的概念有点不确定.

我明白了:

我们去掉了一个应该在某个事件发生后调用的函数.它用于拖动,键盘等事件,目的是不会一直触发事件被触发,而是在事件系列完成时触发.通常在键入整个单词后,或者拖动或调整大小序列已结束.

我们限制了在发生一系列事件时应该触发的函数,但是当我们想控制它被调用的次数时.就像在拖动运动中一样,我们希望仅在距离的每x个像素中调用该函数,或者仅每隔100ms调用该函数,而不是每次触发该事件时都调用该函数.因此,在发生一系列事件时调用油门功能,只需更少次数.

题:

这是对这些功能及其目的的正确看法吗?还有其他功能可以区分它们吗?

javascript throttling function debouncing

9
推荐指数
1
解决办法
1817
查看次数

延迟建议时间 Material-UI Autocomplete 组件

任何人都知道如何在给出建议之前延迟时间?

一旦我写了第一封信,它就给了我建议,我想推迟一下,我通读了文档但找不到它,也许不可能?

reactjs material-ui

7
推荐指数
3
解决办法
5773
查看次数

如何限制jQuery事件的回调?

好吧,所以我在google中搜索,你在输入中输入文字,它会立即为你提供条目.但我不喜欢那样.我使用类似的东西$("TEXTINPUT").keyup(function() {.当用户输入速度非常快时,它会多次连接到数据库.是否有可能,只有当用户停止键入1-2秒,我们才会连接到PHP文件,但不是立即?我需要在jQuery中这样做.谢谢.

jquery

6
推荐指数
2
解决办法
4266
查看次数

在发出HTTP请求之前先对其进行限制

我在Angular 2中构建了一个加载微调器组件,该组件要在发出HTTP请求之前触发,并在完成时禁用。问题在于,每次用户更改输入(复选框的选中,在输入框中键入内容)时,都会触发http请求。这意味着很多请求,并且覆盖层不断增加。我想在触发输入后等待一段时间(半秒?),然后再触发http请求,让用户有时间输入其他输入。我已经阅读了一些有关反跳的内容,但据我所知,这是在等待另一个请求之前的时间吗?据我所知,这只是两次请求之间的缓冲时间。

基本上,现在,我有一个处理输入的组件。更改输入时(现在是复选框),将触发以下代码:

@Output() filtersChanged = new EventEmitter();
emitFilters(): void {
    this.filtersChanged.emit(this.filters);
}
Run Code Online (Sandbox Code Playgroud)

通过中介步骤,这会触发我的http请求:

getEvents(filters): Observable<Event[]> {
    this.loadingSpinnerService.showLoadingSpinner();
    let params: URLSearchParams = new URLSearchParams();
    params.set('types', filters.types.join(','));
    params.set('dates', filters.dates.join(','));
    return this.http
        .get('//api.dexcon.local/getEvents.php', { search: params })
        .map((response: Response) => {
            return response.json().events;
        });
}
Run Code Online (Sandbox Code Playgroud)

在Angular 1中,我将其设置为一个超时,该超时在每次用户影响输入时都会刷新,因此它会在触摸最终输入后​​触发设置的时间。这也是在Angular 2中做到这一点的最佳方法吗?根据我的阅读,去抖动将请求锁定在与第二个请求过于接近的位置,但是我想知道如何在给定的时间段内采取措施后最好地防止请求发生。

angular

6
推荐指数
1
解决办法
1991
查看次数

如何在不使用TextChanged事件的情况下在Winform上捕获整个条形码值?

当在form1上扫描条形码时,我调用数据库以获取该条形码的项目,并使用预先填充的数据打开form2。

如果我使用文本更改事件,则它的生成次数与一个条形码中的数字相同。

我无法检查条形码的长度,因为每次都可能不同。

扫描条形码时,我应该使用哪个事件只打一个电话?

我尝试了TextChanged,KeyPress,KeyDown事件,但是它们都被多次调用了。

    private void txt_Barcode_TextChanged(object sender, EventArgs e)
    {
        con.Open();
        GenerateInvoice gn = new GenerateInvoice();
        string query = "SELECT * FROM dbo.Inventory WHERE Barcode = '" + txt_Barcode.Text + "' ";

        SqlCommand cmd = new SqlCommand(query, con);
        SqlDataReader dr = cmd.ExecuteReader();


        while (DR1.Read())
        {
            gn.txt_Barcode.Text = dr["Barcode"].ToString();
            gn.txt_ProductName.Text = dr["ProductName"].ToString();
            gn.txt_Price.Text = dr["SellingPrice"].ToString();
            gn.txt_QTY.Text = 1.ToString();
            gn.txt_Total.Text = dr["SellingPrice"].ToString();

        }
        con.Close();
    }
Run Code Online (Sandbox Code Playgroud)

我愿意使用文本框捕获Form1上的条形码(我将其隐藏在UI中)

c# barcode winforms

6
推荐指数
2
解决办法
920
查看次数

Lodash 去抖动触发每次更改

我正在尝试消除从 React 中的输入更改发送 Redux 操作的抖动。

const debouncedSubmit = debounce(() => dispatch(new TaskAnswerSubmit({index: props.index, text: answer})), 1000)

function onChange(e){
    setAnswer(e.target.value)
    debouncedSubmit()
}
Run Code Online (Sandbox Code Playgroud)

这会延迟发送操作,但仍会为每次按键发送一个操作。我想在输入完成后稍等一下,然后再发送一次操作。

我在这里做错了什么?

javascript lodash reactjs redux react-redux

3
推荐指数
1
解决办法
2454
查看次数

在lodash中节流和去抖的区别

来自lodash文档:

风门

创建一个限制函数,每个等待毫秒最多只调用一次func

防抖动

创建一个去抖动函数,该函数延迟调用func,直到自上次调用去抖动函数后经过等待毫秒之后

我对这两个定义有点困惑,听起来它们是相似的.

有人可以用例子给我们一个简单的解释.

javascript function lodash

2
推荐指数
1
解决办法
2443
查看次数

requestFullscreen 后等待回流结束

好吧,伙计们,姑娘们,对于你们所有的巫师来说,这是一个棘手的问题......

我正在开发一个沉浸式网络应用程序,该应用程序会覆盖移动设备上的默认触摸滚动行为。内容被划分为使用 100% 视口的页面,并且通过在页面之间上下滑动来处理导航。

第一次滑动时,我调用requestFullscreen()该body元素,这当然会在视口调整大小时导致回流。问题是我也希望第一次滑动来触发自定义滚动行为,但我正在使用Element.nextElementSibling.scrollIntoView({ block : start, behavior : 'smooth' }),直到回流完成,下一页的顶部边缘( )HTMLSectionElement已经可见,因此滚动不会发生。

如果我习惯setTimeout等待大约 600 毫秒直到回流完成,滚动效果会按预期工作,但我对这种 hacky 解决方法不满意,我更喜欢使用更优雅的异步解决方案。

我首先尝试从 requestFullscreen 返回的 Promise 执行器内部触发滚动效果,resolve但这没有帮助。这个承诺在执行流程的早期就得到了解决。

然后我从事件处理程序内部尝试fullscreenchange。这里也不走运,因为该事件在全屏更改发生之前立即触发。

最后,我尝试从窗口resize事件处理程序内部进行尝试,但这会在回流发生之前触发。我requestIdleCallback也在这里添加了一个,但没有任何区别。

所以我的问题是......有没有可靠的方法来检测回流操作的结束?或者...是否有人有更好的 B 计划,而不是放弃使用scrollIntoView我自己的滚动效果并将其编码到窗口调整大小处理程序中。

html javascript reflow window-resize html5-fullscreen

2
推荐指数
1
解决办法
993
查看次数