Благодаря принятому ответу мне удалось реализовать плавную «прокрутку наверх». Прокрутка к вершине на самом деле даже проще, чем прокрутка к определенному целевому элементу, поскольку мы прокручиваем до 0-позиции всегда. Вот код:
scrollTo(yPoint: number, duration: number) {
setTimeout(() => {
window.scrollTo(0, yPoint)
}, duration);
return;
}
smoothScrollToTop() {
let startY = this.currentYPosition();
let stopY = 0; // window top
let distance = stopY > startY ? stopY - startY : startY - stopY;
if (distance < 100) {
window.scrollTo(0, stopY);
return;
}
let speed = Math.round(distance / 100);
let step = speed;
speed = Math.max(9, speed); //min 9 otherwise it won't look smooth
let leapY = stopY > startY ? startY + step : startY - step;
let timer = 0;
if (stopY > startY) {
for (let i = startY; i < stopY; i += step) {
// since setTimeout is asynchronous, the for-loop will will fire all scrolls
// nearly simoultaniously. Therefore, we need to multiply the speed with
// a counter which lets the scrolls start with a growing offset which lets the
// setTimeout wait for a growing time till it scrolls there
// that way, we prevent the window to scroll instantly to the target Yposition
this.scrollTo(leapY, timer * speed);
leapY += step; if (leapY > stopY) leapY = stopY; timer++;
}
return;
} else {
for (let i = startY; i > stopY; i -= step) {
this.scrollTo(leapY, timer * speed);
leapY -= step; if (leapY < stopY) leapY = stopY; timer++;
}
}
}
currentYPosition() {
// Firefox, Chrome, Opera, Safari
if (self.pageYOffset) return self.pageYOffset;
// Internet Explorer 6 - standards mode
if (document.documentElement && document.documentElement.scrollTop)
return document.documentElement.scrollTop;
// Internet Explorer 6, 7 and 8
if (document.body.scrollTop) return document.body.scrollTop;
return 0;
}
Если вы хотите, вы можете позволить вашей кнопке «Прокрутка вверх» динамически появляться при прокрутке пользователя:
@HostListener('window:scroll', ['$event'])
onWindowScroll(event) {
this.onScrollFadeInOutScrollToTopButton();
}
shouldShowScrollToTop: boolean = false;
onScrollFadeInOutScrollToTopButton() {
this.shouldShowScrollToTop = (window.pageYOffset >= window.screen.height/2);
}
И HTML для Кнопка прокрутки вверх:
<div class="back-to-top">
<button *ngIf="shouldShowScrollToTop" [@fadeInOutTrigger]="animateButtonEntryState" class="mat-primary" md-fab (click)="smoothScrollToTop()">^</button>
Как видите, у этой кнопки также есть анимационный триггер. Вы можете подумать об использовании иконки для кнопки, и в идеале ваша кнопка должна иметь стиль position:fixed;
.
Я бы, вероятно, просто сделал системный вызов, чтобы запустить независимый процесс для сканирования. Существует ряд AV-движков командной строки от различных поставщиков.
Взгляните на Microsoft Antivirus API . Он использует COM, который должен быть достаточно простым для взаимодействия с .NET. Это относится конкретно к Internet Explorer и Microsoft Office, но я не понимаю, почему вы не сможете использовать его для сканирования любого файла по требованию.
Все современные сканеры, работающие в Windows, должны понимать этот API.
Разное У антивирусных сканеров есть API. Я интегрировался с Sophos. Я почти уверен, что у Norton есть API, а у McAfee - нет (раньше). Какое вирусное программное обеспечение вы хотите использовать? Вы можете попробовать Metascan , так как он позволит интегрироваться со многими различными сканерами, но за него взимается годовая лицензия. :-P
По моему опыту, вы можете использовать COM для взаимодействия с некоторыми антивирусными программами. Но то, что я предлагаю, немного проще, просто проанализируйте результаты сканирования после сканирования. Все, что вам нужно сделать, это запустить процесс сканирования и указать его на файл / папку, которые вы хотите просканировать, сохранить результаты сканирования в файл или перенаправить стандартный вывод в ваше приложение и проанализировать результаты.